【问题标题】:Django: do I need to do HttpResponseRedirect to render a simple string after a POST?Django:我需要在 POST 之后执行 HttpResponseRedirect 来呈现一个简单的字符串吗?
【发布时间】:2011-01-27 19:22:19
【问题描述】:

我有一个向 Django 站点发出 POST 请求的移动应用程序。

我想在应用发出 POST 请求后返回一个简单的字符串(不是基于模板的页面),表示“成功”或“失败”(编辑:加上一些额外信息) 视情况而定。

****编辑:请注意,它不是发出请求的浏览器,它是一个应用程序(因此不涉及返回按钮),我想做一些额外的应用程序端工作基于 POST 请求的结果 - 基本上我想交回一些信息。*****

但是我知道,在 Django 中发出 POST 请求后,您应该执行 HttpResponseRedirect。但是,我真的需要重定向到另一个页面并编写一个新函数来处理它,全部输出一个字符串吗?

如果是这样,我应该如何在 HttpResponseRedirect 中传递应用程序的成功/失败状态,因为它应该只接受一个参数?

谢谢!

【问题讨论】:

    标签: django


    【解决方案1】:

    如果这是用户生成的 POST(标准网站),那么 S. Lott 的建议是正确的。

    但是,如果您将 POST 作为 API 调用,则只需返回字符串。在移动设备上,客户为每个 HTTP 请求付费。

    【讨论】:

    • 谢谢。做一个 HttpResponse 是否安全,适当地设置 status_code 和内容,而不是重定向,那么? (请注意,不涉及浏览器,因此用户无需点击“后退”按钮。POST 请求是在移动应用的代码中创建的。)
    • 当然,任何响应(无论 request 类型)都可以返回带有 status_code 的数据。
    • 嗯... 401 状态的响应将触发浏览器上的验证。带有 301 的响应是重定向。状态码是触发浏览器做(或不做)某些事情的原因。您不应该随意更改状态代码。
    【解决方案2】:

    我真的需要重定向到 另一个页面并编写一个新功能 处理它,全部输出一个字符串?

    是的。

    如果他们在浏览器上点击“返回”,您会希望您在发布后提供了重定向。

    如果您不重定向并且他们在浏览器上点击“返回”,他们可能会再次重新发布表单。您可能不想处理这个问题,因此在发布后重定向更容易。

    如何在 HttpResponseRedirect 中传递应用的成功/失败状态

    看到这个:http://docs.djangoproject.com/en/dev/ref/request-response/#django.http.HttpResponse.status_code

    编辑

    如果没有浏览器,则没有返回按钮。由于没有返回按钮,因此不需要重定向。

    "在 Django 中的 POST 请求之后,你 应该做一个 HttpResponseRedirect"

    没有任何意义。你不是“应该”这样做的。 Django 帮助你做到了。

    您不会在 POST 之后将重定向作为 Web 服务的一部分。

    您必须在 POST 之后重定向以帮助人们使用他们的浏览器

    【讨论】:

    • 谢谢。有点混乱 - Django 文档(在您发布的页面上)说 HttpResponseRedirect 采用“一个 single 参数,重定向到的路径”。我真的可以给它添加一个状态码吗?
    • 响应 is 状态码为 301。更改重定向的状态码没有意义,因为它不会是具有不同状态的重定向代码。你想做什么?请更新您的问题以解释如何在不返回状态代码 301 的情况下“重定向”?
    • 啊,对不起,我只是不明白。我想向应用程序发送一个包含一些信息的简单字符串。而且我想要安全 - 我不知道不使用 HttpResponseRedirect 是否是一个安全错误,或者它是否只是在浏览器发出 POST 请求后才真正需要。
    • HttpResponseRedirect 不是“安全”错误,它一直在发生。它是使您的页面可用的必要条件。它是通过 301 状态码完成的。在这方面你真的别无选择。请更新您的问题以更具体地说明您的问题。
    • 我想你可能看错了。我知道 HttpResponseRedirect 不是安全错误:我的问题是 not using 在没有浏览器需要担心的情​​况下是否是安全错误。
    【解决方案3】:

    正如 S.Lott 所说,是的,您确实想要重定向。

    但是,我不确定您在重定向后显示“应用程序的成功/失败状态”是什么意思。重定向应该仅在 POST 成功时发生;否则,您将重新显示带有任何验证的表单显示错误。

    【讨论】:

    • 我没有很好地解释我的问题。它是一个发送请求的移动app。不涉及浏览器。我需要应用程序抓取字符串,查看响应(包括不同变量的值)并进行一些处理。基本上我需要的是返回一个 400 响应一些额外的信息,可能是 XML 或 json 形式。
    【解决方案4】:

    有 JavaScript 吗?那么也许你可以发出一个 ajax 请求并在结果出现后简单地更改内容。这也应该可以防止“返回”出现问题,并且您不需要重定向。

    【讨论】:

      猜你喜欢
      • 2013-03-25
      • 2013-02-06
      • 1970-01-01
      • 1970-01-01
      • 2017-12-04
      • 2019-07-12
      • 1970-01-01
      • 1970-01-01
      • 2020-11-25
      相关资源
      最近更新 更多