Ich habe die folgende Ansicht:Django Rastrahmen keine Daten deserialisiert als JSON übergeben
class Authenticate(generics.CreateAPIView):
serializer_class = AuthSerializer
def create(self, request):
serializer = AuthSerializer(request.POST)
# Do work here
Das funktioniert gut, wenn die Daten als eine Form übergeben wird, jedoch, wenn die Daten als JSON übergeben wird Der Serializer wird mit allen Feldern, die auf None festgelegt sind, instanziiert. Die Dokumentation erwähnt, dass für die Verarbeitung eines RAW-JSON-Arguments etwas spezifisch sein sollte.
Jede Hilfe wäre willkommen.
UPDATE
Ich habe die folgende Arbeit um, um die Browsable API wie erwartet zu machen, wenn eine rohe JSON vorbei, aber ich glaube, es muss ein besserer Weg geben.
def parse_data(request):
# If this key exists, it means that a raw JSON was passed via the Browsable API
if '_content' in request.POST:
stream = StringIO(request.POST['_content'])
return JSONParser().parse(stream)
return request.POST
class Authenticate(generics.CreateAPIView):
serializer_class = AuthSerializer
def create(self, request):
serializer = AuthSerializer(parse_data(request))
# Do work here
Was ist der Fehler, den Sie bekommen haben? Oder hast du tatsächlich einen Fehler bekommen? –
Der Serializer wird mit Nones initialisiert. Das Problem besteht darin, dass die Browsable-API den JSON innerhalb eines Schlüssels "_content" sendet. Ich habe eine Funktion erstellt, um festzustellen, wann dies der Fall ist, und den JSON zu einem Diktat zu analysieren, aber ich glaube, dass es einen besseren Weg geben muss. – Raphael