【发布时间】:2016-03-29 17:32:17
【问题描述】:
我正在像下面这样进行 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)
{
}
});
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'),
]
我在 ajax 调用时收到“禁止(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)
{
}
});
【问题讨论】:
-
您刚刚将字符串
'{{ csrf_token }}'传递为csrfmiddlewaretoken,并且您的ajax 调用无法将其与相对的匹配。相反,您可以从调用函数中的 html 手动获取csrf令牌的哈希值。 -
在问题中添加渲染的 HTML 模板。
-
@v1k45 我在已编辑的问题中添加了渲染的 {{ csrf_token }}。除此之外,我只是在模板中渲染几个字符串值,这些值工作正常
-
@v1k45 我也没有在模板中使用任何表单。此 ajax 调用是在按钮单击事件上完成的
-
尝试在ajax请求中将
X-CSRFToken请求头设置为csrftoken。
标签: django django-csrf