2016-03-29 14 views
3

私はAJAX呼び出し以下のように作っています:禁止(CSRFが見つからないか、間違ったトークン。):

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がある:私は取得しています

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

]

「禁断(CSRFトークンがないか間違っています):/ issuebook "ajax呼び出しでエラーが発生しました。

AJAX呼び出しでCSRFトークンを取得としてレンダリングされます。このエラーは、あなたのAJAX機能でprocessDatacontentTypeオプションによって引き起こされる

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

文字列 ''{{csrf_token}}'を' csrfmiddlewaretoken'として渡しました。あなたのajax呼び出しはそれを相対的な呼び出しと一致させることができません。その代わりにあなたの呼び出し関数のhtmlから手動で 'csrf'トークンのハッシュ値を得ることができます。 – Kasramvd

+0

レンダリングされたHTMLテンプレートを質問にも追加してください。 – v1k45

+0

@ v1k45編集した質問にレンダリングされた{{csrf_token}}を追加しました。これとは別に、私はちょうどうまく動作しているテンプレートにいくつかの文字列値をレンダリングしています – ankit

答えて

2

。これらの2つのオプションを削除すると、問題が解決されます。

説明: のContent-Type application/x-www-form-urlencodedでURLエンコードと引数はジャンゴに送信する必要があります。一方、processData: falseを設定した場合、POSTパタータイマーはエンコードされず、contentType: falsetext/plainというajax POST要求を送信します。

関連する問題