对于使用Ajax时cookie中找不到csrf_token的解决方法

问题是这样的,项目中使用的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"));
        }
    }
});

 

你可能感兴趣的:(那些坑)