如何将Django的CSRF令牌添加到jQuery POST请求的标头中?

库尔特·皮克

我正在尝试使用动态填充的字段创建Django表单:也就是说,checkin_type从下拉菜单中选择一个字段()时,其他字段会自动填充相应的数据。为此,一旦选择了下拉选项,我想向服务器发送POST请求。

到目前为止,我已经尝试了以下模板(遵循https://docs.djangoproject.com/en/2.0/ref/csrf/):

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/js-cookie@2/src/js.cookie.min.js"></script>
<script>
    $(document).ready(function(){
        var csrftoken = Cookies.get('csrftoken');

        $(".auto-submit").change(function() {
            $.post({
                url: "{% url 'get-checkin-type' %}",
                data: $(".auto-submit option:selected").val(),
                headers: {
                    X-CSRFToken: csrftoken
                }
            })
        });
    });
</script>


<form action="" method="post">{% csrf_token %}
    {% for field in form %}
        <div class="{% if field.name == 'checkin_type' %}auto-submit{% endif %}">
            {{ field.errors }}
            {{ field.label_tag }}
            {{ field }}
        </div>
    {% endfor %}
    <input type="submit" value="Send message" />
</form>

但是,当我选择一个下拉选项时,

新增:17个未捕获的SyntaxError:意外令牌-

X-CSRFToken: csrftoken中发出

在此处输入图片说明

有人可以向我指出此代码有什么问题吗?(我尝试从https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Errors/Unexpected_token查找它,但到目前为止还无法弄清楚)。

顺便说一句,从jQuery看来,将CSRF令牌添加到所有$ .post()请求的数据中,也可以将CSRF令牌添加到POST请求的data,但这对我来说似乎并不是最优雅的方法,并且文档指出

因此,存在另一种方法:在每个XMLHttpRequest上,将自定义X-CSRFToken标头设置为CSRF令牌的值。

PSK

您缺少单引号,请尝试以下操作。

$(".auto-submit").change(function() {
    $.post({
        url: "{% url 'get-checkin-type' %}",
        data: $(".auto-submit option:selected").val(),
        headers: {
            'X-CSRFToken': csrftoken
        }
    })
});

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在Dropzone上传请求的标头中包含CSRF令牌?

使用jQuery将访问控制请求标头添加到AJAX请求的标头中

如何知道我的请求主体的Content-Length以便将其添加到我的请求标头中

无法在Golang中的GET请求的标头中传递Bearer令牌

如何将CSRF令牌添加到Ajax请求

jQuery将CSRF令牌添加到所有$ .post()请求的数据中

如何将json添加到RestSharp POST请求

如何从AWS Lambda事件对象(在python中)获取POST请求的标头,其中传入请求的主体为空,但标头中的信息

简单的Odata客户端-如何在每个请求标头中添加oAuth令牌?

执行POST时,CSRF令牌在标头中传递

Django如何将pk添加到请求对象?

在标头中获取带有令牌的请求

如何在传入的HTTP请求标头中添加授权令牌

如何将标头中的令牌作为http get和http post传递?

在ember-file-upload的请求标头中添加auth令牌

在Red中发出POST请求时如何在标头中使用变量

Python的请求如何处理标头中的多个Cookie

无法为Django POST请求将CSRF令牌添加到XMLhttpRequest

如何将JWT承载令牌添加到对API的所有请求中

如何将Canonical标签添加到HTTP标头中以动态生成PDF

如何将toggleSelectAll功能复选框添加到标头插槽生成的新标头中

如何将子字符串添加到某些(不是全部)fasta标头中

如何在python请求的标头中发送API密钥?

如何将jsf或html标签添加到p:panel的标头中

Chrome扩展程序:如何更改AJAX请求标头中的来源?

fosRestBundle:将数组发送到Http请求标头中

如何在 Python 请求标头中包含列表

如何在 curl 的请求标头中设置环境变量?

Django 和 React:请求标头中未设置 csrf cookie