Apprezzerei qualcuno che mi mostri come fare una semplice richiesta POST usando JSON con il framework Django REST. Non vedo alcun esempio di questo nel tutorial, da nessuna parte?Come creare un JSON POST semplice con Django REST Framework? Token CSRF mancante o errato
Ecco il mio oggetto modello Role che mi piacerebbe pubblicare. Questo sarà un Ruolo nuovo di zecca che vorrei aggiungere al database, ma sto ricevendo un errore 500.
{
"name": "Manager",
"description": "someone who manages"
}
Ecco la mia richiesta ricciolo in un terminale bash:
curl -X POST -H "Content-Type: application/json" -d '[
{
"name": "Manager",
"description": "someone who manages"
}]'
http://localhost:8000/lakesShoreProperties/role
L'URL
http://localhost:8000/lakesShoreProperties/roles
funziona con una richiesta GET, e posso tirare giù tutti i ruoli in il database, ma non riesco a creare nuovi ruoli. Non ho impostato le autorizzazioni. Sto usando una vista standard 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
E nei miei urls.py
per questa applicazione, l'url relativo - vista mappature sono corrette:
url(r'^roles/$', views.RoleList.as_view()),
url(r'^role/(?P<pk>[0-9]+)/$', views.RoleDetail.as_view()),
messaggio di errore è:
{
"detail": "CSRF Failed: CSRF token missing or incorrect."
}
Cosa sta succedendo qui e quale è la correzione per questo? Localhost è una richiesta cross-site? Ho aggiunto @csrf_exempt
a RoleDetail
e RoleList
ma non sembra cambiare nulla. Questo decoratore può essere aggiunto a una classe o deve essere aggiunto a un metodo? Aggiungendo il @csrf_exempt
decorare, il mio errore diventa:
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'
Poi ho disabilitato CSRF throughtout l'intera applicazione, e io ora ottenere questo messaggio:
{ "non_field_errors": [ "i dati non valido"]} quando il mio oggetto JSON che conosco è json valido. È un errore non di campo, ma sono bloccato qui.
Bene, si scopre che il mio json non era valido?
{
"name": "admin",
"description": "someone who administrates"
}
vs
[
{
"name": "admin",
"description": "someone who administrates"
}
]
Avere le staffe di cinta [], provoca la richiesta POST a fallire. Ma usando il validatore jsonlint.com, entrambi i miei oggetti json convalidano.
Aggiornamento: il problema era con l'invio del POST con PostMan, non nel back-end. Vedi https://stackoverflow.com/a/17508420/203312
'RoleSerializer' qualcosa che hai definito? Forse vale la pena esaminarlo. – stellarchariot