在Django中通过AJAX发布参数时,“ CSRF令牌丢失或不正确”
我尝试发布参数像
jQuery.ajax( {
'type': 'POST',
'url': url,
'contentType': 'application/json',
'data': "{content:'xxx'}",
'dataType': 'json',
'success': rateReviewResult
}
);
但是,Forbidden 403. CSRF verification failed. Request aborted.
我正在使用Django返回'django.middleware.csrf.CsrfViewMiddleware'
,找不到在不影响安全性的情况下如何防止此问题。
回答:
你可以通过两种不同的方式发出AJAX发布请求:
告诉你的视图不要检查csrf令牌。这可以通过使用decorator来完成@csrf_exempt
,如下所示:
from django.views.decorators.csrf import csrf_exempt@csrf_exempt
def your_view_name(request):
...
要将csrf令牌嵌入每个AJAX请求中,对于jQuery,它可能是:
$(function () { $.ajaxSetup({
headers: { "X-CSRFToken": getCookie("csrftoken") }
});
});
该getCookie函数从cookie检索csrf令牌的位置。我使用以下实现:
function getCookie(c_name){
if (document.cookie.length > 0)
{
c_start = document.cookie.indexOf(c_name + "=");
if (c_start != -1)
{
c_start = c_start + c_name.length + 1;
c_end = document.cookie.indexOf(";", c_start);
if (c_end == -1) c_end = document.cookie.length;
return unescape(document.cookie.substring(c_start,c_end));
}
}
return "";
}
另外,jQuery 有一个用于访问cookie 的插件,类似这样:
// set cookie$.cookie('cookiename', 'cookievalue');
// read cookie
var myCookie = $.cookie('cookiename');
// delete cookie
$.cookie('cookiename', null);
以上是 在Django中通过AJAX发布参数时,“ CSRF令牌丢失或不正确” 的全部内容, 来源链接: utcz.com/qa/400497.html