HttpResponse(status=<code>) 如何在 Django 中工作?

How does HttpResponse(status=<code>) work in django?

我正在 Django 中试验 HTTP 错误代码,所以我有一个关于 HttpResponse(status=<code>) 的问题。比如我要发送一个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

希望有人能帮助我。

HttpResponse(status=[code]) 只是一种在响应的 header 中发送实际 HTTP 状态代码的方法。它通过 status_code 到达客户端,但除了 HTTP header 之外不对数据进行任何更改。您可以通过 properly-working 响应传递任何状态代码,它仍然会像以前一样显示,但是如果您进入浏览器的控制台,您会看到它读取为“405”页面。

HTTP headers 简单地随每个请求和响应传输,供 Web 服务器解析并提供 metadata/info 给开发人员。即使是 404 页面也会发送内容,告诉用户有一个 404;否则,用户只会得到一个空白页面,并且不知道出了什么问题。

如果您想表示错误,可以查看 these docs. Alternatively, you can use the HttpResponseRedirect (see here) 选项以定向到提供自定义错误响应的 error-view。

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

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

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