Wie erstelle ich mit Django REST Framework ein einfaches POST-JSON? CSRF-Token fehlt oder ist falsch

Würde mich freuen, wenn jemand mir zeigt, wie man eine einfache POST-Anfrage mit JSON und Django REST-Framework erstellt. Ich sehe keine Beispiele dafür im Tutorial irgendwo?

Hier ist mein Rollenmodellobjekt, das ich POSTEN möchte. Dies ist eine brandneue Rolle, die ich der Datenbank hinzufügen möchte, aber es wird ein Fehler von 500 angezeigt.

{
    "name": "Manager", 
    "description": "someone who manages"
}

Hier ist meine Curl-Anfrage an einer Bash-Terminal-Eingabeaufforderung:

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

Funktioniert mit einer GET-Anforderung, und ich kann alle Rollen in der Datenbank abrufen, aber scheinbar 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 meinemurls.py Für diese App sind die relevanten URL-Ansichtszuordnungen korrekt:

url(r'^roles/

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 standortübergreifende Anfrage? Ich habe hinzugefügt@csrf_exempt zuRoleDetail undRoleList aber es scheint nichts zu ändern. Kann dieser Decorator überhaupt zu einer Klasse hinzugefügt werden oder muss er zu einer Methode hinzugefügt werden? Hinzufügen der@csrf_exempt dekorieren, 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 CSRF in der gesamten App deaktiviert und erhalte jetzt die folgende Meldung:

{"non_field_errors": ["Invalid data"]} Wenn mein mir bekanntes JSON-Objekt ein gültiges JSON ist. Es ist ein Nichtfeldfehler, aber ich stecke 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"
    }
]

Wenn die eckigen Klammern [] angegeben sind, schlägt die POST-Anforderung fehl. Mit dem Validator von jsonlint.com werden jedoch beide meiner json-Objekte validiert.

Aktualisieren: Das Problem war beim Versenden des POST mit PostMan, nicht im Backend. Sehenhttps://stackoverflow.com/a/17508420/203312

, views.RoleList.as_view()), url(r'^role/(?P<pk>[0-9]+)/

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 standortübergreifende Anfrage? Ich habe hinzugefügt@csrf_exempt zuRoleDetail undRoleList aber es scheint nichts zu ändern. Kann dieser Decorator überhaupt zu einer Klasse hinzugefügt werden oder muss er zu einer Methode hinzugefügt werden? Hinzufügen der@csrf_exempt dekorieren, 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 CSRF in der gesamten App deaktiviert und erhalte jetzt die folgende Meldung:

{"non_field_errors": ["Invalid data"]} Wenn mein mir bekanntes JSON-Objekt ein gültiges JSON ist. Es ist ein Nichtfeldfehler, aber ich stecke 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"
    }
]

Wenn die eckigen Klammern [] angegeben sind, schlägt die POST-Anforderung fehl. Mit dem Validator von jsonlint.com werden jedoch beide meiner json-Objekte validiert.

Aktualisieren: Das Problem war beim Versenden des POST mit PostMan, nicht im Backend. Sehenhttps://stackoverflow.com/a/17508420/203312

, 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 standortübergreifende Anfrage? Ich habe hinzugefügt@csrf_exempt zuRoleDetail undRoleList aber es scheint nichts zu ändern. Kann dieser Decorator überhaupt zu einer Klasse hinzugefügt werden oder muss er zu einer Methode hinzugefügt werden? Hinzufügen der@csrf_exempt dekorieren, 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 CSRF in der gesamten App deaktiviert und erhalte jetzt die folgende Meldung:

{"non_field_errors": ["Invalid data"]} Wenn mein mir bekanntes JSON-Objekt ein gültiges JSON ist. Es ist ein Nichtfeldfehler, aber ich stecke 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"
    }
]

Wenn die eckigen Klammern [] angegeben sind, schlägt die POST-Anforderung fehl. Mit dem Validator von jsonlint.com werden jedoch beide meiner json-Objekte validiert.

Aktualisieren: Das Problem war beim Versenden des POST mit PostMan, nicht im Backend. Sehenhttps://stackoverflow.com/a/17508420/203312

Antworten auf die Frage(8)

Ihre Antwort auf die Frage