Django POST-URL-Fehler

8

Ich versuche eine REST API in Django zu erstellen, indem ich Json ausspreche. Ich habe Probleme, wenn ich eine POST-Anfrage mit curl im Terminal mache. Der Fehler, den ich bekomme, ist

  

Sie haben diese URL über POST aufgerufen, aber die URL endet nicht in einem Schrägstrich und   Sie haben APPEND_SLASH festgelegt. Django kann nicht auf die Schrägstrich-URL umleiten   während die POST-Daten beibehalten werden. Ändern Sie Ihr Formular, um auf zu zeigen   127.0.0.1:8000/add/ (beachten Sie den abschließenden Schrägstrich) oder setzen Sie APPEND_SLASH = False in Ihren Django-Einstellungen.

Meine URL.py ist

%Vor%

und meine Ansichten sind

%Vor%

Ich weiß, dass es Json nicht gibt, aber ich habe das oben erwähnte Problem, wenn ich eine POST-Anfrage im Terminal mache.

%Vor%

Ich bin jedoch neu im Django.

    
Zabi 16.03.2012, 14:11
quelle

2 Antworten

18

Stellen Sie zuerst sicher, dass Sie die Anfrage an http://127.0.0.1/add/ nicht http://127.0.0.1/add senden.

Zweitens möchten Sie vielleicht auch die Ansicht von der csrf-Verarbeitung ausnehmen, indem Sie die @csrf_exempt Dekorator - da Sie nicht das entsprechende Token von cURL senden.

    
Burhan Khalid 16.03.2012, 20:43
quelle
15

Für die Konsistenz der URL hat Django eine Einstellung namens APPEND_SLASH , die immer einen Schrägstrich an das Ende der URL anhängt, wenn sie nicht auf diese Weise gesendet wurde. Dies stellt sicher, dass /my/awesome/url/ immer von dieser URL geliefert wird, anstatt von /my/awesome/url und /my/awesome/url/ .

Django tut dies jedoch, indem er automatisch die Version ohne den Schrägstrich am Ende auf den mit dem Schrägstrich am Ende umleitet. Redirects enthalten den Status der Anforderung nicht mit ihnen. Wenn dies geschieht, werden Ihre POST-Daten gelöscht.

Sie müssen lediglich sicherstellen, dass Sie beim Senden Ihres POST die Datei am Ende an die Version mit dem Schrägstrich senden.

    
Chris Pratt 16.03.2012 14:24
quelle