@permission_classes((AllowAny, ))
class Viewset(viewsets.ViewSet):
renderer_classes = (JSONRenderer, )
def list(self, request, *args, **kwargs):
return Response()
Ein gültiger Json-Antworttext wie null
oder {}
Kein Content-Type
Header gesetzt und eine leere Antwort wird zurückgegeben - besonders schmerzhaft, wenn Anfragen mit ajax()
jquery gestellt werden. Es wirft einen Parserfehler und weist das Versprechen auf eine Erfolgsantwort mit einem leeren Körper zurück. Siehe hier https://stackoverflow.com/a/6186905
PR hier: https://github.com/encode/django-rest-framework/pull/6027
Nur eine kurze Klarstellung.. Ich kann Ihr genaues Setup möglicherweise nicht neu erstellen, aber ein kurzer, manueller Test zeigt, dass der Header Content-Type
korrekt auf application/json
.
Was die leere Antwort angeht, bin ich geneigt, @kltdwrds zuzustimmen. Ich weiß nicht, ob die Spezifikation einen leeren Körper zulässt, aber sowohl JavaScripts JSON.parse
als auch json.loads
Python können keine leere Zeichenfolge decodieren.
Das heißt, data=None
sollte als null
codiert werden.
Auf den zweiten Blick macht das aktuelle Verhalten Sinn. Obwohl JSON.parse
und json.loads
fehlschlagen, liegt es in der Verantwortung des Clients, den Inhaltstyp vor dem Parsen zu überprüfen. Wenn überhaupt, ist dies ein Fehler in jQuery.
hm ich benutze
from rest_framework import viewsets
from rest_framework.renderers import JSONRenderer
from rest_framework.response import Response
Ich bin mir nicht sicher, wo der Header Content-Type
gesetzt wird, aber ich habe gerade bestätigt, dass er in den Antworten fehlt, indem ich das obige Beispiel verwendet habe.
Es sieht so aus, als ob der Content-Type
Header in einer leeren Renderer-Antwort gelöscht wird (Zeile 80).
https://github.com/encode/django-rest-framework/blob/master/rest_framework/response.py#L72
Unser derzeitiges Verhalten für return Response()
ist beabsichtigt. Obwohl auch die Rückgabe von null
gültig wäre, ist es üblicher, dass wir eine Möglichkeit benötigen, eine leere Antwort ohne Inhaltstyp zurückzugeben. Ich würde es wahrscheinlich lieber lassen, wenn wir die Dinge vorerst so lassen, wie sie sind.
Hilfreichster Kommentar
Es sieht so aus, als ob der
Content-Type
Header in einer leeren Renderer-Antwort gelöscht wird (Zeile 80).https://github.com/encode/django-rest-framework/blob/master/rest_framework/response.py#L72