如何从姜戈视图返回 HTTP状态码204?

我想从 Django 视图返回状态代码 204 No Content。这是对一个自动 POST 的响应,它更新数据库,我只需要表明更新是成功的(没有重定向客户端)。

HttpResponse的子类可以处理大多数其他代码,但不能处理204。

最简单的方法是什么?

72628 次浏览
return HttpResponse(status=204)

Either what Steve Mayne answered, or build your own by subclassing HttpResponse:

from django.http import HttpResponse


class HttpResponseNoContent(HttpResponse):
status_code = 204


def my_view(request):
return HttpResponseNoContent()

When using render, there is a status keyword argument.

return render(request, 'template.html', status=204)

(Note that in the case of status 204 there shouldn't be a response body, but this method is useful for other status codes.)

The other answers work mostly, but they do not produce a fully compliant HTTP 204 responses, because they still contain a content header. This can result in WSGI warnings and is picked up by test tools like Django Web Test.

Here is an improved class for a HTTP 204 response that is compliant. (based on this Django ticket):

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()