[python] Django 뷰에서 HTTP 상태 코드 204를 반환하려면 어떻게해야합니까?

204 No ContentDjango 뷰에서 상태 코드를 반환하고 싶습니다 . 데이터베이스를 업데이트하는 자동 POST에 대한 응답이며 클라이언트를 리디렉션하지 않고 업데이트가 성공했음을 나타내기만하면됩니다.

HttpResponse대부분의 다른 코드를 처리 하는 하위 클래스가 있지만 204는 없습니다.

이를 수행하는 가장 간단한 방법은 무엇입니까?



답변

return HttpResponse(status=204)


답변

Steve Mayne이 대답 한 내용 중 하나이거나 HttpResponse를 서브 클래 싱하여 직접 빌드하십시오.

from django.http import HttpResponse

class HttpResponseNoContent(HttpResponse):
    status_code = 204

def my_view(request):
    return HttpResponseNoContent()


답변

사용하는 경우 렌더링 하는이 status키워드 인수입니다.

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

(상태 204의 경우 응답 본문이 없어야하지만이 메서드는 다른 상태 코드에 유용합니다.)


답변

다른 답변은 대부분 작동하지만 콘텐츠 헤더가 여전히 포함되어 있기 때문에 완전히 호환되는 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()


답변