禁止(CSRF令牌丢失或不正确.):

ank*_*kit 7 django django-csrf

我正在进行下面的ajax调用:

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)
        {
        }
    });
Run Code Online (Sandbox Code Playgroud)

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'), 
Run Code Online (Sandbox Code Playgroud)

]

我在ajax调用中收到"Forbidden(CSRF令牌丢失或不正确.):/ issuebook"错误.

ajax调用中的csrf标记呈现为:

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

xyr*_*res 6

此错误是由ajax函数processData和contentType选项引起的.删除这两个选项将解决此问题.

说明: 必须将参数作为urlencoded with Content-Type发送到Django application/x-www-form-urlencoded.然而,如果你设置processData: false它将不会编码POST parmaters contentType: false并将发送ajax POST请求as text/plain.