Das Posten mit AngularJSs "HttpProvider" auf einem Endpunkt, der mit Djangos Standardansicht oder Django REST Framework erstellt wurde, gibt einen 403-Fehler zurück. Komm schon.
$http.post('/api/entries', {'title': 'Tagebuch', 'body': 'Es ist heute ein gutes Wetter'})
Response
{detail: "CSRF Failed: CSRF token missing or incorrect."}
Dies liegt daran, dass ich den CSRF-Schutz von Django ungeachtet der Verwendung von AngularJS nicht gut umgehen konnte.
Es scheint, dass sich der Wert des Anforderungsheaders, in dem das CSRF-Token gespeichert ist, zwischen dem von AngularJS standardmäßig verwendeten Wert und dem von Django erkannten Wert unterscheidet.
Wenn Sie das folgende Dokument lesen, muss Django bei einer Ajax-Anfrage den Wert "csrftoken" mit dem Headernamen "X-CSRFToken" senden.
Cross Site Request Forgery protection | Django documentation | Django
AngularJSs "HTTPProvider" bietet eine Option zum Ändern des Verhaltens von CSRF Protection. Wenn Sie dies angeben, können Sie den Headernamen beim Senden eines CSRF-Tokens und den Schlüssel des Cookies ändern, auf das verwiesen werden soll.
[AngularJS: API:
Um Django einzurichten, gehen Sie wie folgt vor.
var myApp = angular.module('myApp', []).config(function($httpProvider) {
$httpProvider.defaults.xsrfCookieName = 'csrftoken'
$httpProvider.defaults.xsrfHeaderName = 'X-CSRFToken'
});
Jetzt interpretiert AngularJS das csrf-Token
automatisch und sendet es, ohne dass Sie etwas tun müssen. Herzliche Glückwünsche.
Es gibt noch eine weitere Sucht nach AngularJS mit Django, und es ist standardmäßig nicht möglich, Variablen zu erweitern, da die Variablenerweiterung von AngularJS mit der Vorlagen-Engine von Django in Konflikt steht.
Sie können sich freuen, wenn Sie das Symbol wie folgt ändern.
So lösen Sie einen Konflikt mit variablem Bereich zwischen AngularJS und jinja2 --Qiita
Recommended Posts