我想204 No Content
从 Django 视图返回状态码。这是对更新数据库的自动 POST 的响应,我只需要表明更新成功(无需重定向客户端)。
有HttpResponse
处理大多数其他代码的子类,但不是 204。
最简单的方法是什么?
我想204 No Content
从 Django 视图返回状态码。这是对更新数据库的自动 POST 的响应,我只需要表明更新成功(无需重定向客户端)。
有HttpResponse
处理大多数其他代码的子类,但不是 204。
最简单的方法是什么?
return HttpResponse(status=204)
使用render时,有一个status
关键字参数。
return render(request, 'template.html', status=204)
(请注意,在状态 204 的情况下,不应有响应正文,但此方法对其他状态代码很有用。)
Steve Mayne 回答了什么,或者通过继承 HttpResponse 来构建你自己的:
from django.http import HttpResponse
class HttpResponseNoContent(HttpResponse):
status_code = 204
def my_view(request):
return HttpResponseNoContent()
其他答案大多有效,但它们不会产生完全兼容的 HTTP 204 响应,因为它们仍然包含内容标头。这可能会导致 WSGI 警告,并被 Django Web Test 等测试工具拾取。
这是一个改进的符合 HTTP 204 响应的类。(基于这张Django 票证):
from django.http import HttpResponse
class HttpResponseNoContent(HttpResponse):
"""Special HTTP response with no content, just headers.
The content operations are ignored.
"""
def __init__(self, content="", mimetype=None, status=None, content_type=None):
super().__init__(status=204)
if "content-type" in self._headers:
del self._headers["content-type"]
def _set_content(self, value):
pass
def _get_content(self, value):
pass
def my_view(request):
return HttpResponseNoContent()