Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
AJAX POST请求中缺少Django CSRF_Ajax_Django_Csrf - Fatal编程技术网

AJAX POST请求中缺少Django CSRF

AJAX POST请求中缺少Django CSRF,ajax,django,csrf,Ajax,Django,Csrf,因此,我一直在将AJAX与Django代码集成,并遵循了中的说明。代码运行了一点,但我注意到它不适用于我的生产服务器。有人(我相信)提出了一个StackOverflow问题,他们的代码在清除缓存时开始失败,所以在我的AJAX代码工作的浏览器选项卡中,我清除了缓存和cookies(我真的像你试图将会话设为私有时那样清除了所有内容),并且,你瞧,代码不再有效了。因此,不知何故,CSRF令牌没有被发送到需要发送到的任何地方。我得到的错误是403错误。CSRF错误是我在Django存在的祸根。 我发现加

因此,我一直在将AJAX与Django代码集成,并遵循了中的说明。代码运行了一点,但我注意到它不适用于我的生产服务器。有人(我相信)提出了一个StackOverflow问题,他们的代码在清除缓存时开始失败,所以在我的AJAX代码工作的浏览器选项卡中,我清除了缓存和cookies(我真的像你试图将会话设为私有时那样清除了所有内容),并且,你瞧,代码不再有效了。因此,不知何故,CSRF令牌没有被发送到需要发送到的任何地方。我得到的错误是403错误。

CSRF错误是我在Django存在的祸根。 我发现加载这个js可以很好地处理此类错误。 CSRF令牌存在于您的cookies中,这就是为什么在过去清除cookies可能对您有效的原因。 在发出ajax请求之前加载此文件:

$(document).ready(function() {
    function getCookie(name) {
        var cookieValue = null;
        if (document.cookie && document.cookie != '') {
            var cookies = document.cookie.split(';');
            for (var i = 0; i < cookies.length; i++) {
                var cookie = jQuery.trim(cookies[i]);
                if (cookie.substring(0, name.length + 1) == (name + '=')) {
                    cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
                    break;
                }
            }
        }
        return cookieValue;
    }

    var csrftoken = getCookie('csrftoken');

    function csrfSafeMethod(method) {
        return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));
    }

    $.ajaxSetup({
        beforeSend: function (xhr, settings) {
            if (!csrfSafeMethod(settings.type) && !this.crossDomain) {
                xhr.setRequestHeader("X-CSRFToken", csrftoken);
            }
        }
    });
});
$(文档).ready(函数(){
函数getCookie(名称){
var-cookieValue=null;
if(document.cookie&&document.cookie!=''){
var cookies=document.cookie.split(“;”);
对于(变量i=0;i
由于令牌不正确,您可以获得403,但如果Django获得的
主机
头与
参考者
不匹配,也可以获得403。这可能发生在错误的代理设置上(通常使用Nginx,但有时使用Apache),我可能会确认这不是问题。我如何确认这不是问题?请发布您的代码。我在发布的数据中添加了csrfmiddlewaretoken以解决此问题。在每一篇文章中都要输入这段代码有点烦人,但我不明白Django网站上的代码为什么不起作用。我也有同样的问题,有什么解决办法吗?除非我输入错误,否则我是按照Django网站上的说明将这段代码输入到我的项目中的,但它不起作用。