1
我尝试了Django和其他答案的所有文件在这里StackOverflow的,但结果仍然是(CSRF令牌丢失或不正确)Django的Ajax请求仍然导致CSRF的令牌丢失或不正确
因此,这里是我的意见看法的.py:
class MyView(View):
@method_decorator(ensure_csrf_cookie)
def post(self, request, *args, **kwargs):
t = TemplateResponse(request, 'mytemplate.html', data)
t.render()
return JsonResponse({'html' : t.content, 'title' : data['title']})
,这是我的js文件中的AJAX这是一个函数click事件:
$.ajax({
url: window.location.href,
type: 'POST',
data: data,
beforeSend:
function(xhr, settings) {
if (!csrfSafeMethod(settings.type) && !this.crossDomain) {
var token = $.cookie('csrftoken');
console.log(token);
xhr.setRequestHeader("X-CSRFToken", token);
}
},
success:
function(result) {
},
});
第一个电话是成功的,但succeedin g电话导致丢失的标记。
为了调试,我使用了console.log,并且每次点击都返回一个不同的标记。
你可以尝试得到令牌代码移动('VAR令牌= $ .cookie( 'csrftoken');')到'beforeSend'功能? – solarissmoke
@solarissmoke我已经试过了。:(仍然没有工作。 – Red
你能确认'X-CSRFToken'头文件是否真的被发送给后续请求吗?该代码位于'if'块中,并且你没有发布代码这些检查 – solarissmoke