@permission_classes((AllowAny, ))
class Viewset(viewsets.ViewSet):
renderer_classes = (JSONRenderer, )
def list(self, request, *args, **kwargs):
return Response()
Un corps de réponse json valide comme null
ou {}
Aucun en-tête Content-Type
n'est défini et une réponse vide est renvoyée - particulièrement pénible lors des requêtes avec le ajax()
jquery. Il renvoie une erreur d'analyse et rejette la promesse d'une réponse de succès avec un corps vide. Voir ici https://stackoverflow.com/a/6186905
PR ici : https://github.com/encode/django-rest-framework/pull/6027
Juste une clarification rapide. Je ne suis peut-être pas en train de recréer votre configuration exacte, mais un test manuel rapide montre que l'en-tête Content-Type
est correctement défini sur application/json
.
En ce qui concerne la réponse vide, je suis enclin à être d'accord avec @kltdwrds. Je ne sais pas si la spécification permet à un corps vide, cependant, à la fois JavaScript de JSON.parse
et Python json.loads
ne parviennent pas à décoder une chaîne vide.
C'est-à-dire que data=None
doit être encodé sous la forme null
.
À la réflexion, le comportement actuel est logique. Bien que JSON.parse
et json.loads
échouent, il est de la responsabilité du client de vérifier le type de contenu avant l'analyse. Si quoi que ce soit, c'est un bogue dans jQuery.
hum j'utilise
from rest_framework import viewsets
from rest_framework.renderers import JSONRenderer
from rest_framework.response import Response
Je ne sais pas où l'en-tête Content-Type
est défini, mais je viens de confirmer qu'il est absent des réponses à l'aide de l'exemple ci-dessus.
Il semble que l'en-tête Content-Type
soit supprimé sur une réponse de rendu vide (ligne 80)
https://github.com/encode/django-rest-framework/blob/master/rest_framework/response.py#L72
Notre comportement actuel pour return Response()
est intentionnel. Bien que le renvoi de null
soit également valide, il est plus courant que nous ayons besoin d'un moyen de renvoyer une réponse vide sans type de contenu. Je préférerais probablement que nous laissions les choses telles qu'elles sont pour le moment.
Commentaire le plus utile
Il semble que l'en-tête
Content-Type
soit supprimé sur une réponse de rendu vide (ligne 80)https://github.com/encode/django-rest-framework/blob/master/rest_framework/response.py#L72