2016-03-29 30 views
3

Ben ajax çağrısı aşağıda gibi yapıyorum:Yasak (CSRF eksik veya yanlış belirteç.):

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: Ben alıyorum

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'), 

]

"Yasak (CSRF belirteci eksik veya yanlış.): Ajax çağrısında hata. Bu hata ajax işlevinde processData ve contentType seçenekleri kaynaklanır

var data_dict = {'user':{{ user.id }}, 'bookId':that.id, 'csrfmiddlewaretoken':'fSSdu8dJ4FO6FvDz8eU5ISzOewRYyGbC'}; 
        $.ajax({ 
         type: 'POST', 
         url:"/issuebook", 
         data:data_dict, 
         contentType: false, 
         success:function(response) 
         { 
         } 
        }); 
+0

Sadece 'c {{csrf_token}}' 'csrfmiddlewaretoken 'dizesini geçtiniz ve ajax çağrınız göreceli olanla eşleşemiyor. Bunun yerine, çağrı fonksiyonunuzda hsml'den "csrf" jetonunun hash değerini manuel olarak alabilirsiniz. – Kasramvd

+0

İşlenen HTML şablonunu da soruna ekleyin. – v1k45

+0

@ v1k45 Düzenlenen soruya işlenen {{csrf_token}} ekledim. Bunun dışında, şablonda az sayıda dize değeri oluşturuyorum. – ankit

cevap

2

:

ajax çağrısında csrf belirteci

olarak işlenen oluyor. Bu iki seçeneği kaldırmak sorunu çözecektir.

Açıklama: Content-Type application/x-www-form-urlencoded ile urlencoded olarak argümanlar Django'ya gönderilmesi gerekir . Bununla birlikte, processData: false değerini ayarlarsanız, POST parmatörlerini kodlamaz ve contentType: false ajax POST isteğini text/plain olarak gönderir.