Quiero devolver el código de estado 204 No Content
de una vista de Django. Es en respuesta a un POST automático que actualiza una base de datos y solo necesito indicar que la actualización fue exitosa (sin redirigir al cliente).
Hay subclases de HttpResponse
para manejar la mayoría de los demás códigos, pero no el 204.
¿Cuál es la forma más sencilla de hacer esto?
python
django
http
http-status-codes
Destello
fuente
fuente
Respuestas:
return HttpResponse(status=204)
fuente
O lo que respondió Steve Mayne, o cree el suyo propio subclasificando HttpResponse:
from django.http import HttpResponse class HttpResponseNoContent(HttpResponse): status_code = 204 def my_view(request): return HttpResponseNoContent()
fuente
Cuando se usa render , hay un
status
argumento de palabra clave.return render(request, 'template.html', status=204)
(Tenga en cuenta que en el caso del estado 204 no debería haber un cuerpo de respuesta, pero este método es útil para otros códigos de estado).
fuente
Las otras respuestas funcionan en su mayoría, pero no producen respuestas HTTP 204 totalmente compatibles, porque todavía contienen un encabezado de contenido. Esto puede resultar en advertencias WSGI y es detectado por herramientas de prueba como Django Web Test.
Aquí hay una clase mejorada para una respuesta HTTP 204 que es compatible. (basado en este ticket de 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()
fuente