Django CSRF-Token ohne Formen
Klingt komisch, aber was ist mit dem Szenario der Einstellung von Inhalten mit Javascript (z.B. AJAX) ohne Verwendung einer form (möglich sein könnte, zu Lesen einige Inhalte, die von der Oberfläche).
Wo soll ich die csrf_token template-tag? Ich schon Hinzugefügt, die AJAX-Update:
https://docs.djangoproject.com/en/dev/ref/contrib/csrf/#ajax
...aber ich bekomme die "CSRF-überprüfung ist fehlgeschlagen. Anfrage abgebrochen." 404-Fehler.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie einen benutzerdefinierten HTTP-header
X-CSRFToken
, in deinem AJAX-request. Siehe: https://docs.djangoproject.com/en/dev/ref/contrib/csrf/#ajaxWenn Sie bereits gefolgt, dass die Beratung, sollte es funktionieren. Verwenden Sie so etwas wie Firebug zu überwachen, die Anfrage wird gesendet und untersuchen Sie die Header, um sicherzustellen, dass die benutzerdefinierten header ist wirklich übergeben wird. Wenn nicht, dann überprüfen Sie Ihre Implementierung erneut, um sicherzustellen, dass Sie haben es einfach nur als docs beschreiben.
Beachten Sie auch:
ist es einfach mit diesem code:
mehr sehen: https://stackoverflow.com/a/7715325/1743582
Einem CSRF-token zugeordnet ist, zu jeder neuen session ( d.h. jedes mal, wenn Sie log-in). Also, bevor Sie kommen möchten, einige Daten vom Benutzer eingegeben und senden, die als ajax-call auf eine Funktion, die geschützt ist durch csrf_protect Dekorateur, versuchen zu finden, die Funktionen, die aufgerufen werden, bevor Sie erhalten diese Daten vom Benutzer. E. g. einige Vorlage muss neu gerendert zu werden, auf dem Ihre Benutzer Daten eingeben. Diese Vorlage wird dargestellt durch eine Funktion. In dieser Funktion können Sie bekommen csrf-token wie folgt: csrf = Anfrage.COOKIES['csrftoken'] Jetzt pass dieser csrf-value in context dictionary, gegen die Vorlage gerendert wird. Jetzt in dieser Vorlage schreiben dieser Zeile: Jetzt in Ihrem javascript-Funktion, bevor Sie einen ajax-request, Schreibe dies: var csrf = $('#csrf').val() wird diese Auswahl-Wert von token übergeben zur Vorlage und speichern es in der variable csrf-Angriffe. Jetzt während ajax-Aufruf, in Ihrem post-Daten übergeben Sie diesen Wert als gut : "csrfmiddlewaretoken": csrf
Dies funktioniert sogar, wenn Sie nicht implementieren django Formen.
In der Tat, die Logik hier ist : Sie müssen die Zeichen, die Sie bekommen können, von der Anfrage. So brauchen Sie nur, um herauszufinden, die Funktion wird sofort aufgerufen, nachdem log-in. Sobald Sie diese token, entweder ein anderes ajax-Aufruf, um es zu bekommen oder übergeben es an einigen Vorlagen, die zugänglich ist durch Ihre ajax.
Gibt es zwei Schritte in konfigurieren von CSRF-token, wenn Sie möchten, um ein post ohne Formular. Im Grunde bekommen die
csrftoken
von Cookie und setzen Sie den Kopf mit csrftoken (bevor du die Daten POSTEN).1) Holen Sie sich die
csrftoken
von Cookie.2) Sobald Sie die csrftoken, sollte man die Header mit csrftoken (bevor du die Daten POSTEN).