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