Chcę zwrócić kod statusu 204 No Content
z widoku Django. Jest to odpowiedź na automatyczny POST, który aktualizuje bazę danych i po prostu muszę wskazać, że aktualizacja się powiodła (bez przekierowywania klienta).
Istnieją podklasy HttpResponse
obsługujące większość innych kodów, ale nie 204.
Jaki jest najprostszy sposób na zrobienie tego?
python
django
http
http-status-codes
Lampa błyskowa
źródło
źródło
Odpowiedzi:
return HttpResponse(status=204)
źródło
Albo to, na co odpowiedział Steve Mayne, albo stwórz własną, podklasując HttpResponse:
from django.http import HttpResponse class HttpResponseNoContent(HttpResponse): status_code = 204 def my_view(request): return HttpResponseNoContent()
źródło
Podczas używania renderowania występuje
status
argument ze słowa kluczowego.return render(request, 'template.html', status=204)
(Zauważ, że w przypadku statusu 204 nie powinno być treści odpowiedzi, ale ta metoda jest przydatna w przypadku innych kodów stanu).
źródło
Pozostałe odpowiedzi działają głównie, ale nie generują w pełni zgodnych odpowiedzi HTTP 204, ponieważ nadal zawierają nagłówek treści. Może to skutkować ostrzeżeniami WSGI i jest odbierane przez narzędzia testowe, takie jak Django Web Test.
Oto ulepszona klasa dla zgodnej odpowiedzi HTTP 204. (na podstawie tego biletu 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()
źródło