Würde mich freuen, wenn jemand mir zeigt, wie man eine einfache POST-Anfrage mit JSON mit Django-REST-Framework macht. Ich sehe nirgends Beispiele im Tutorial?Wie mache ich einen einfachen POST JSON mit Django REST Framework? CSRF-Token fehlt oder ist falsch
Hier ist mein Vorbild-Objekt, das ich gerne POST würde. Dies ist eine brandneue Rolle, die ich der Datenbank hinzufügen möchte, aber ich bekomme einen Fehler von 500.
{
"name": "Manager",
"description": "someone who manages"
}
Hier ist meine curl Anfrage an einer Eingabeaufforderung bash Terminal:
curl -X POST -H "Content-Type: application/json" -d '[
{
"name": "Manager",
"description": "someone who manages"
}]'
http://localhost:8000/lakesShoreProperties/role
Die URL
http://localhost:8000/lakesShoreProperties/roles
DOES mit einer GET-Anforderung arbeiten, und ich kann in alle Rollen nach unten ziehen die Datenbank, aber ich kann anscheinend keine neuen Rollen erstellen. Ich habe keine Berechtigungen festgelegt. Ich verwende eine Standardansicht in views.py
class RoleDetail(generics.RetrieveUpdateDestroyAPIView):
queryset = Role.objects.all()
serializer_class = RoleSerializer
format = None
class RoleList(generics.ListCreateAPIView):
queryset = Role.objects.all()
serializer_class = RoleSerializer
format = None
Und in meinen urls.py
für diese App, die entsprechenden URL - Ansicht Zuordnungen korrekt sind:
url(r'^roles/$', views.RoleList.as_view()),
url(r'^role/(?P<pk>[0-9]+)/$', views.RoleDetail.as_view()),
Fehlermeldung ist:
{
"detail": "CSRF Failed: CSRF token missing or incorrect."
}
Was ist hier los und was ist die Lösung dafür? Ist localhost eine Cross-Site-Anfrage? Ich habe @csrf_exempt
zu RoleDetail
und RoleList
hinzugefügt, aber es scheint nichts zu ändern. Kann dieser Decorator sogar zu einer Klasse hinzugefügt werden, oder muss er zu einer Methode hinzugefügt werden? Hinzufügen des @csrf_exempt
verzieren, mein Fehler wird:
Request Method: POST
Request URL: http://127.0.0.1:8000/lakeshoreProperties/roles/
Django Version: 1.5.1
Exception Type: AttributeError
Exception Value:
'function' object has no attribute 'as_view'
Dann habe ich deaktiviert CSRF through die gesamte app, und ich erhalte jetzt diese Meldung:
{ "non_field_errors": [ "Ungültige Daten"]}, wenn mein JSON-Objekt, das ich kenne, ist gültig json. Es ist ein Nicht-Feldfehler, aber ich stecke genau hier fest.
Nun, es stellt sich heraus, dass mein JSON nicht gültig war?
{
"name": "admin",
"description": "someone who administrates"
}
vs
[
{
"name": "admin",
"description": "someone who administrates"
}
]
die umschließenden Klammern Mit [] bewirkt, dass die POST-Anforderung fehlschlägt. Aber mit dem Jsonlint.com-Validator validieren beide JSON-Objekte.
Update: Das Problem war mit dem Senden des POST mit PostMan, nicht im Backend. Siehe https://stackoverflow.com/a/17508420/203312
Ist 'RoleSerializer' etwas, das Sie definiert haben? Vielleicht lohnt es sich, einen Blick darauf zu werfen. – stellarchariot