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

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

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

谢谢

【问题讨论】:

    标签: jquery django


    【解决方案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

          干杯,

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2018-05-15
            • 2018-07-04
            • 1970-01-01
            • 2023-03-21
            • 2015-01-13
            • 2014-07-01
            • 1970-01-01
            相关资源
            最近更新 更多