91

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

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

最简单的方法是什么?

4

4 回答 4

196
return HttpResponse(status=204)
于 2012-09-18T12:20:34.357 回答
24

使用render时,有一个status关键字参数。

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

(请注意,在状态 204 的情况下,不应有响应正文,但此方法对其他状态代码很有用。)

于 2015-07-05T14:13:54.163 回答
21

Steve Mayne 回答了什么,或者通过继承 HttpResponse 来构建你自己的:

from django.http import HttpResponse

class HttpResponseNoContent(HttpResponse):
    status_code = 204

def my_view(request):
    return HttpResponseNoContent()
于 2012-09-18T12:43:20.793 回答
0

其他答案大多有效,但它们不会产生完全兼容的 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()
于 2020-07-10T13:56:00.063 回答