【问题标题】:CSRF token missing or incorrect (Django)CSRF 令牌丢失或不正确 (Django)
【发布时间】:2019-05-29 21:48:51
【问题描述】:

我的表单是这样创建的

<form class="k-form" id="k_form" novalidate="novalidate">{% csrf_token %}

并稍后在 html 中关闭。

这是我的 AJAX 帖子:

    $('#submit').on("click",function(e){
    var ready_to_submit = true;
    if(ready_to_submit){
        e.preventDefault();
        var local_data = new Object();
        local_data.csrfmiddlewaretoken = $('input[name=csrfmiddlewaretoken]').val();

        console.log(local_data.csrfmiddlewaretoken);
        var json_data = JSON.stringify(local_data);

        console.log(json_data);
        $.ajax({
            type:'POST',
            url:'/create_new_group/create_group/',
            data:json_data ,
            success:function(data){
                    if(data.status == 1){
                            //success!
                            console.log('Success!')
                    }
                    else if(data.status == 2){
                            //failed
                            console.log('Failed!')
                    }
            }
    });

    }
});

这将返回 Forbidden(CSRF 令牌丢失或不正确。):/create_new_group/create_group/ 在我的 Django 服务器上。我做错了什么?

【问题讨论】:

  • 当您在浏览器开发者工具网络选项卡中检查请求时,它是否以服务器预期的格式发送正确的数据?
  • 你登录了吗?如果不是 csrf 令牌将不可用。如果此令牌存在,请检查您的 cookie。
  • 尝试在data 选项中使用$("#k_form").serializeArray() 而不是json_data 变量。它将序列化表单内的所有内容,包括 csrf 令牌。
  • 当我像这样传递数据时它工作正常:{ csrfmiddlewaretoken:$('input[name=csrfmiddlewaretoken]').val(),} 但我想让数据是动态的。所以我不知道出了什么问题。

标签: javascript html django csrf


【解决方案1】:

尝试添加到您的导入中:

from django.views.decorators.csrf import csrf_exempt
from django.utils.decorators import method_decorator

在你的视图函数之上:

@method_decorator(csrf_exempt, name='dispatch')

它解决了我的 Forbidden(CSRF 令牌丢失或不正确。):

【讨论】:

    猜你喜欢
    • 2021-07-14
    • 2021-11-13
    • 2012-04-20
    • 2012-09-25
    • 1970-01-01
    • 2016-05-12
    • 2016-06-10
    • 2017-09-14
    • 2019-12-04
    相关资源
    最近更新 更多