@permission_classes((AllowAny, ))
class Viewset(viewsets.ViewSet):
renderer_classes = (JSONRenderer, )
def list(self, request, *args, **kwargs):
return Response()
Um corpo de resposta json válido como null
ou {}
Nenhum cabeçalho Content-Type
definido e uma resposta vazia é retornada - particularmente dolorosa ao fazer solicitações com ajax()
do jquery. Ele lança um erro de análise e rejeita a promessa em uma resposta de sucesso com um corpo vazio. Veja aqui https://stackoverflow.com/a/6186905
PR aqui: https://github.com/encode/django-rest-framework/pull/6027
Apenas um esclarecimento rápido.. Posso não estar recriando sua configuração exata, mas um teste rápido e manual mostra que o cabeçalho Content-Type
está definido corretamente como application/json
.
Quanto à resposta vazia, estou inclinado a concordar com @kltdwrds. Eu não sei se a especificação permite que um corpo vazio, porém, tanto de JavaScript JSON.parse
e do Python json.loads
não conseguem decodificar uma string vazia.
Ou seja, data=None
deve ser codificado como null
.
Pensando bem, o comportamento atual faz sentido. Embora JSON.parse
e json.loads
falhem, é responsabilidade do cliente verificar o tipo de conteúdo antes de analisar. Se alguma coisa, isso é um bug no jQuery.
hum estou usando
from rest_framework import viewsets
from rest_framework.renderers import JSONRenderer
from rest_framework.response import Response
Não tenho certeza de onde o cabeçalho Content-Type
é definido, mas acabei de confirmar que está faltando nas respostas usando o exemplo acima.
Parece que o cabeçalho Content-Type
foi excluído em uma resposta de renderizador vazia (linha 80)
https://github.com/encode/django-rest-framework/blob/master/rest_framework/response.py#L72
Nosso comportamento atual para return Response()
é intencional. Embora retornar null
também seja válido, é mais comum precisarmos de uma maneira de retornar uma resposta vazia sem tipo de conteúdo. Eu provavelmente preferiria deixar as coisas como estão por enquanto.
Comentários muito úteis
Parece que o cabeçalho
Content-Type
foi excluído em uma resposta de renderizador vazia (linha 80)https://github.com/encode/django-rest-framework/blob/master/rest_framework/response.py#L72