问题是这样的,项目中使用的post请求全部是Ajax形式的,而且也使用了
'django.middleware.csrf.CsrfViewMiddleware',
中间件,但是访问页面时却提示找不到csrf_token异常。
解决办法:
在页面任意地方加{% csrf_token %}
原因:CsrfViewMiddleware这个中间件会在页面渲染时,检测{% csrf_token %}标签,如果有这个标签,CsrfViewMiddleware就会在cookie和{% csrf_token %}的位置存入csrf_token值。
可以用下面的js函数把csrftoken放到Ajax请求头里。
function csrfSafeMethod(method) {
// these HTTP methods do not require CSRF protection
return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));
}
$.ajaxSetup({
beforeSend: function (xhr, settings) {
if (!csrfSafeMethod(settings.type) && !this.crossDomain) {
xhr.setRequestHeader("X-CSRFToken", $.cookie("csrftoken"));
}
}
});