【问题标题】:How does HttpResponse(status=<code>) work in django?HttpResponse(status=<code>) 在 django 中是如何工作的?
【发布时间】:2015-10-06 08:00:30
【问题描述】:

我正在 django 中试验 HTTP 错误代码,所以我有一个关于 HttpResponse(status=&lt;code&gt;) 的问题。比如我想发送一个HTTP错误码405,我有如下代码:

def myview(request):
   if request.method == 'POST':
      ...
   else:
      return HttpResponse(status=405)

我还有这个 HTTP 错误代码 (405.html) 的模板,并将以下代码行放在 urls.py 中

handler405 = 'handling_error.views.bad_method'

我的 bad_method 视图如下:

def bad_method(request):
    datos_template = {}
    return render(request, '405.html', datos_template, status=405)

我这样想django根据http错误码重定向到正确的模板,但是不行,那么:

我做错了什么吗? HttpResponse(status=) 在 Django 中是如何工作的? 通过 HttpResponse(status=) 发送 HTTP 错误码的目的是什么?

对不起,很多问题:P

我希望有人可以帮助我。

【问题讨论】:

    标签: python django http-error


    【解决方案1】:

    HttpResponse(status=[code]) 只是在响应标头中发送实际 HTTP 状态代码的一种方式。它带着那个 status_code 到达客户端,但是除了 HTTP 标头之外不做任何数据更改。您可以传递任何带有正常响应的状态代码,它仍会像以前一样显示,但如果您进入浏览器的控制台,您会看到它读取为“405”页面。

    HTTP 标头只是随每个请求和响应一起传输,以便 Web 服务器解析并向开发人员提供元数据/信息。甚至 404 页面也有发送内容,告诉用户有 404;如果没有,用户只会得到一个空白页面,并且不知道出了什么问题。

    如果您想表示错误,可以查看these docs。或者,您可以使用 HttpResponseRedirect (see here) 选项定向到提供自定义错误响应的错误视图。

    【讨论】:

      【解决方案2】:

      Django 允许您在 urls.py 中为 handler400handler403handler404handler500 指定 error handlers。它不支持handler405

      请注意,您可以返回任何状态的 http 响应,并且 Django 会将该响应返回给用户,它不会调用该状态代码的处理程序。

      在引发异常时调用错误处理程序。例如,如果在视图中引发了 Http404,Django 将调用 handler404 视图。

      【讨论】:

      • 感谢您的帮助。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-07
      • 2016-01-17
      相关资源
      最近更新 更多