Ich bilde Ajax-Aufruf wie folgt:Verboten (CSRF-Token fehlen oder falsch sind.):
var data_dict = {'user':{{ user.id }}, 'bookId':that.id, 'csrfmiddlewaretoken': '{{ csrf_token }}'};
$.ajax({
type: 'POST',
url:"/issuebook",
data:data_dict,
processData: false,
contentType: false,
success:function(response)
{
}
});
urls.py ist:
urlpatterns = [
url(r'^$',views.checkLogin,name='checklogin'),
url(r'^mylibrary/(?P<pk>\d+)/(?P<user_name>[\w\-]+)$',login_required(views.MyLibrary.as_view()),name='mylibrary'),
url(r'^centrallibrary/(?P<pk>\d+)/(?P<user_name>[\w\-]+)$',login_required(views.CentralLibrary.as_view()),name='centrallibrary'),
url(r'^issuebook$',login_required(views.IssueBookView.as_view()),name='issuebook'),
]
I „bin immer verboten (CSRF-Token fehlt oder ist falsch.):/Issuebook "Fehler beim Ajax-Aufruf.
Die csrf Token in Ajax-Aufruf wird immer wiedergegeben als:
var data_dict = {'user':{{ user.id }}, 'bookId':that.id, 'csrfmiddlewaretoken':'fSSdu8dJ4FO6FvDz8eU5ISzOewRYyGbC'};
$.ajax({
type: 'POST',
url:"/issuebook",
data:data_dict,
contentType: false,
success:function(response)
{
}
});
Sie haben gerade die Zeichenfolge '{{csrf_token}} '' als 'csrfmiddlewaretoken' übergeben, und Ihr Ajax-Aufruf kann sie nicht mit der relativen abgleichen. Stattdessen können Sie den Hash-Wert von 'csrf' Token manuell von Ihrem HTML in Ihrer Anruffunktion abrufen. – Kasramvd
Fügen Sie die gerenderte HTML-Vorlage auch in die Frage ein. – v1k45
@ v1k45 Ich habe das gerenderte {{csrf_token}} in der bearbeiteten Frage hinzugefügt. Abgesehen davon tue ich nur einige String-Werte in der Vorlage, die gut funktioniert – ankit