【问题标题】:How to post the data to the database on click (i.e non form data) from HTML page using django?如何使用 django 从 HTML 页面单击(即非表单数据)将数据发布到数据库?
【发布时间】:2020-03-20 17:31:16
【问题描述】:

我在 4 页中有卡片,我也有一个分页,我希望用户每次点击卡片,卡片内容应该使用 django 存储在数据库中。为了使用 django 将表单数据存储在数据库中,我们可以使用 csrf_token 和 post 方法,但是你能建议如何在用户每次点击时将卡片数据存储在数据库中吗? 请参考https://www.modsy.com/project/room 给出的链接,并建议用户点击时如何将卡片内容存储在数据库中

【问题讨论】:

  • 也许使用客户端 Javascript 脚本可能会解决您的问题。每当您点击您的卡片时,都会请求一个 http post 请求。最后,需要在 django 中实现端点。
  • 是的。我认为@akirashimosoeda 已经回答了。您可能希望使用 Django REST 框架来构建 API。
  • @ak,@Feng Hao 你能像你说的那样为这个问题推荐任何示例网址吗..
  • 你能展示一下用于存储信息的模型吗?

标签: python django


【解决方案1】:

你应该使用 Javascript 和 AJAX,使用 django rest 框架。

您的 html 模板上的 Javascript 将调用使用 django REST 创建的 APIView。

这里的例子:

How to make a POST request using DJANGO REST framework with ajax

【讨论】:

  • 谢谢你的建议@Epikstar 你能推荐任何关于如何做到这一点的示例资源吗?
  • 我刚刚在我的评论中分享了一个例子
【解决方案2】:

这是一个工作示例,假设您的 template.html 中有一个删除锚标记

<a onclick="delOnClick(this)" id="{{ task.id }}"> Delete </a>

html 模板上的&lt;scripts&gt;&lt;/scripts&gt; 标记中,添加此ajax

<script>
    function delOnClick(ref) {
        var url = "{% url 'app:model_delete' %}"
        var id = $(ref).attr("id")
        var intId = parseInt(id)
        var data = { id: intId, csrfmiddlewaretoken: '{{ csrf_token }}', contentType: 'application/json' }
        $.post(url, data, function (data, status) {
            location.reload(true)
        })
    }
</script>

现在这样做是调用删除视图,该视图应该收到一个发布请求,id 的元素要在其主体中删除。 如果您的删除视图是获取视图,则更简单,您只需在 url 中添加 id 并调用 get 请求而不是 post 请求。 确保在您的页面中添加ajax

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

【讨论】:

  • 现在您可以通过从上下文变量或任何位置读取来将您想要的任何数据添加到您的var data 变量中。这是post 请求删除操作的示例。
  • 在我上面给出的链接中,我已经使用分页进行下一个和返回,就像我在点击 4 次后有 4 个页面一样,数据应该使用发布请求存储在数据库中,你能解释一下吗怎么样??@saadi。
  • 所以你的意思是它像一个向导一样工作?您希望保留每一步的数据,然后在最后一步之后,通过调用某个视图将其转储到数据库中。
  • 是的@saadi 你是对的吗?你能举例说明如何做到这一点吗?
  • 我现在没有可分享的示例,但here 是通过示例完成的。可能是您正在寻找的。​​span>
猜你喜欢
  • 2016-10-22
  • 2019-08-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-09
  • 1970-01-01
  • 2019-08-02
相关资源
最近更新 更多