【发布时间】:2010-10-11 23:17:41
【问题描述】:
所以,我刚刚开始在我的一个 Django 项目中使用 jQuery,但我有一个非常菜鸟的问题。
在 django 视图中,您必须从视图返回一个 HttpResponse 对象,但有时我不需要返回任何内容。例如,我可能只是通过 ajax 更新数据库,不需要发回任何东西。所以我的问题是,在这种情况下你会怎么做?
谢谢
【问题讨论】:
所以,我刚刚开始在我的一个 Django 项目中使用 jQuery,但我有一个非常菜鸟的问题。
在 django 视图中,您必须从视图返回一个 HttpResponse 对象,但有时我不需要返回任何内容。例如,我可能只是通过 ajax 更新数据库,不需要发回任何东西。所以我的问题是,在这种情况下你会怎么做?
谢谢
【问题讨论】:
HTTP 响应不仅仅是向浏览器发送内容。响应与状态代码和多个 HTTP 标头相关联。此外,响应可能包含正文(实际内容)。
我认为发送一个没有正文的 HttpResponse 对象是可以的。那就是:
return HttpResponse()
这将发送一个状态码为 200 OK 的 HTTP 响应,这正是服务器端发生的情况,即操作成功,一切正常。尽管有更好的方法,请参见下文。
Restfully说,当操作遇到问题时,你应该返回一个带有适当status code的HTTP响应。就像指定服务器端错误的 5XX 状态代码之一。
现在,查看所有这些 HTTP 状态代码,我们会看到 201 Created 状态代码,当您将 POST 数据存储在某个地方(如数据库)时,它比 200 OK 更合适。在这种情况下,你应该在你的视图中做这样的事情:
return HttpResponse(status=201)
而且,正如有人已经提到的那样,您可以利用 JavaScript 中的这些状态代码,以便向用户展示更多信息性消息,或者为您的请求选择其他策略。
【讨论】:
你仍然想返回一个 HttpResponse 让 jQuery 知道响应是成功还是失败。大多数包括 jQuery 的 javascript 库都在寻找 200 ok 响应。更不用说返回一个包含受影响的行数或投票计数的 JSON 对象可能很有用。
【讨论】:
我会返回一个空字符串:
return HttpResponse("")
【讨论】:
感谢您的回答。我目前正在处理的示例是待办事项列表,用户可以在其中将项目拖动到新位置。我正在使用 jQuery 将发布数据发送到视图,该视图将新订单保存在数据库中。对于此示例,我不想在用户使用列表后向用户显示响应,因为它会变得烦人并且不是真正必要的。如果发生任何错误,我会及时发现并在发生时向用户显示适当的响应。
那么在这种情况下使用return HttpResponse(status=201) 是个好主意吗?
【讨论】:
【讨论】: