@permission_classes((AllowAny, ))
class Viewset(viewsets.ViewSet):
renderer_classes = (JSONRenderer, )
def list(self, request, *args, **kwargs):
return Response()
Un cuerpo de respuesta json válido como null
o {}
No se establece el encabezado Content-Type
y se devuelve una respuesta vacía, lo que es particularmente doloroso cuando se realizan solicitudes con ajax()
jquery. Lanza un parseerror y rechaza la promesa en una respuesta exitosa con un cuerpo vacío. Ver aquí https://stackoverflow.com/a/6186905
PR aquí: https://github.com/encode/django-rest-framework/pull/6027
Solo una aclaración rápida. Es posible que no esté recreando su configuración exacta, pero una prueba manual rápida muestra que el encabezado Content-Type
está configurado correctamente en application/json
.
En cuanto a la respuesta vacía, me inclino a estar de acuerdo con @kltdwrds. No sé si la especificación permite un cuerpo vacío, sin embargo, tanto de JavaScript JSON.parse
y Python de json.loads
llegan a decodificar una cadena vacía.
Es decir, data=None
debe codificarse como null
.
Pensándolo bien, el comportamiento actual tiene sentido. Aunque JSON.parse
y json.loads
fallan, es responsabilidad del cliente verificar el tipo de contenido antes de analizarlo. En todo caso, se trata de un error en jQuery.
mmm estoy usando
from rest_framework import viewsets
from rest_framework.renderers import JSONRenderer
from rest_framework.response import Response
No estoy seguro de dónde se establece el encabezado Content-Type
, pero acabo de confirmar que falta en las respuestas usando el ejemplo anterior.
Parece que el encabezado Content-Type
se elimina en una respuesta de renderizador vacía (línea 80)
https://github.com/encode/django-rest-framework/blob/master/rest_framework/response.py#L72
Nuestro comportamiento actual para return Response()
es intencional. Aunque devolver null
también sería válido, es más común que necesitemos una forma de devolver una respuesta vacía sin tipo de contenido. Probablemente prefiero que dejemos las cosas como están por ahora.
Comentario más útil
Parece que el encabezado
Content-Type
se elimina en una respuesta de renderizador vacía (línea 80)https://github.com/encode/django-rest-framework/blob/master/rest_framework/response.py#L72