Django + 阿贾克斯

Posted

技术标签:

【中文标题】Django + 阿贾克斯【英文标题】:Django + Ajax 【发布时间】:2010-10-11 23:17:41 【问题描述】:

所以,我刚刚开始在我的一个 Django 项目中使用 jQuery,但我有一个非常菜鸟的问题。

在 django 视图中,您必须从视图返回一个 HttpResponse 对象,但有时我不需要返回任何内容。例如,我可能只是通过 ajax 更新数据库,不需要发回任何东西。所以我的问题是,在这种情况下你会怎么做?

谢谢

【问题讨论】:

【参考方案1】:

HTTP 响应不仅仅是向浏览器发送内容。响应与状态代码和多个 HTTP 标头相关联。此外,响应可能包含正文(实际内容)。

我认为发送一个没有正文的 HttpResponse 对象是可以的。那就是:

return HttpResponse()

这将发送一个状态码为 200 OK 的 HTTP 响应,这正是服务器端发生的情况,即操作成功,一切正常。尽管有更好的方法,请参见下文。

Restfully说,当操作遇到问题时,你应该返回一个带有适当status code的HTTP响应。就像指定服务器端错误的 5XX 状态代码之一。

现在,查看所有这些 HTTP 状态代码,我们会看到 201 Created 状态代码,当您将 POST 数据存储在某个地方(如数据库)时,它比 200 OK 更合适。在这种情况下,你应该在你的视图中做这样的事情:

return HttpResponse(status=201)

而且,正如有人已经提到的那样,您可以利用 javascript 中的这些状态代码,以便向用户展示更多信息性消息,或者为您的请求选择其他策略。

【讨论】:

【参考方案2】:

你仍然想返回一个 HttpResponse 让 jQuery 知道响应是成功还是失败。大多数包括 jQuery 的 javascript 库都在寻找 200 ok 响应。更不用说返回一个包含受影响的行数或投票计数的 JSON 对象可能很有用。

【讨论】:

【参考方案3】:

我会返回一个空字符串:

return HttpResponse("")

【讨论】:

【参考方案4】:

感谢您的回答。我目前正在处理的示例是待办事项列表,用户可以在其中将项目拖动到新位置。我正在使用 jQuery 将发布数据发送到视图,该视图将新订单保存在数据库中。对于此示例,我不想在用户使用列表后向用户显示响应,因为它会变得烦人并且不是真正必要的。如果发生任何错误,我会及时发现并在发生时向用户显示适当的响应。

那么在这种情况下使用return HttpResponse(status=201) 是个好主意吗?

【讨论】:

我相信 201 意味着你创造了一些东西,如果你只是移动一些东西,你可以返回 200。【参考方案5】:

抱歉,还不能评论。

HTTP 状态代码是添加附加信息的好方法(如 REST 所示)。不是 200、404 或 500 的请参见此处:

RFC2616

干杯,

【讨论】:

以上是关于Django + 阿贾克斯的主要内容,如果未能解决你的问题,请参考以下文章

无法将 ajax json 发布请求发送到 django 视图

Django3 Like Ajax Button Book By Antonio Mele

Django prefetch_related缓存不反映更改

Django - 学习目录

Django初识

Django之路