Ich möchte den Statuscode 204 No Content
aus einer Django-Ansicht zurückgeben. Es ist eine Antwort auf einen automatischen POST, der eine Datenbank aktualisiert, und ich muss nur angeben, dass die Aktualisierung erfolgreich war (ohne den Client umzuleiten).
Es gibt Unterklassen für HttpResponse
die meisten anderen Codes, jedoch nicht für 204.
Was ist der einfachste Weg, dies zu tun?
python
django
http
http-status-codes
Blitz
quelle
quelle
Antworten:
return HttpResponse(status=204)
quelle
Entweder was Steve Mayne geantwortet hat, oder Sie erstellen Ihre eigene, indem Sie HttpResponse unterordnen:
from django.http import HttpResponse class HttpResponseNoContent(HttpResponse): status_code = 204 def my_view(request): return HttpResponseNoContent()
quelle
Bei Verwendung von Render gibt es ein
status
Schlüsselwortargument.return render(request, 'template.html', status=204)
(Beachten Sie, dass im Fall von Status 204 kein Antworttext vorhanden sein sollte, diese Methode jedoch für andere Statuscodes nützlich ist.)
quelle
Die anderen Antworten funktionieren meistens, erzeugen jedoch keine vollständig kompatiblen HTTP 204-Antworten, da sie immer noch einen Inhaltsheader enthalten. Dies kann zu WSGI-Warnungen führen und wird von Testtools wie Django Web Test erfasst.
Hier ist eine verbesserte Klasse für eine HTTP 204-Antwort, die kompatibel ist. (basierend auf diesem 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()
quelle