2016-07-11 4 views
0

Ich habe eine Ansicht, die von CreateAPIView mit einem Modell Serializer in Django REST Framework einzurichten erbt.Wo die Antwort von POST-Anforderung in Django REST-Framework verändern

Wenn ich eine Anfrage senden, gibt es eine JSON-Repräsentation des Objekts, das erstellt wurde.

würde Ich mag die Daten aus der Antwort wickeln, wie unten dargestellt:

{'data' : { 'field1' : 'value1' , 
       'field2' : value2 , 
       etc..... 
      } , 
'errors' : None , 
'message': [{} , {}] , 
'result' : 'OK' , 
} 

Wo ist der beste Ort, um die Daten zu ändern, die zurückgegeben wird?

Ich habe versucht, einen benutzerdefinierten Renderer zu erstellen, wie in dieser Frage gezeigt wurde: Adding root element to json response (django-rest-framework) aber es wird nie genannt. Liegt das daran, dass es nur für GET-Anfragen und nicht für Posts relevant ist?

Antwort

1

Ich denke, dass diese Struktur nicht sehr relevant ist:

  1. Ergebnis: warum ein Feld enthalten, OK zu sagen, da der Statuscode der Anfrage ist für Sie diese Informationen zu geben: 200 -> OK , 201 -> erstellt, 400 -> schlechte Anfrage, etc ...
  2. Daten und Fehler in der gleichen Antwort macht keinen Sinn für mich. Vielleicht haben Sie ein spezielles Verhalten in created Methode Ihres Serializers, aber wenn es einen Fehler gibt, scheint es logisch, dass es keine Daten zurück zu senden (vielleicht bin ich falsch). DRF ermöglicht es Ihnen, Daten mit .is_valid() Methode zu validieren, und Sie können einfach Fehler zurückschicken mit (zum Beispiel)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) 

oder direkt Ausnahme mit .is_valid(raise_exception=True) erhöhen.

Nichtsdestotrotz, wenn Sie diese Struktur behalten möchten, kann dieser Job aus Ihrer Sicht erledigt werden. Beispiel:

return Response({ 
    'data': serializer.data, 
    'errors': serializer.errors, # `.is_valid()` must be called 
    'message': [{} , {}], 
    'result':'OK' 
}) 
+0

Ich bin irgendwie einverstanden, aber das ist, was ich aufgefordert wurde zu implementieren. –

+0

oh ok. Also, wie gesagt, mach diese Arbeit aus deiner Sicht. Wenn Sie diese Struktur viel Zeit benötigen, können Sie je nach dem übergebenen Serializer eine Hilfsfunktion zum Erstellen dieser Struktur erstellen. :) –

+0

Es spricht mit Salesforce, was schrecklich ist, mit allen zu arbeiten. Alles erfordert viel mehr Aufwand als es sollte. –