首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ajax POST中的Django csrf (使用{csrf}时才设置csrf cookie )

ajax POST中的Django csrf (使用{csrf}时才设置csrf cookie )
EN

Stack Overflow用户
提问于 2015-03-19 15:28:10
回答 1查看 1.8K关注 0票数 0

我的django应用程序使用ajax将项目添加到购物车中。ajax请求方法是POST,我通过js启用请求头:

代码语言:javascript
复制
var csrftoken = getCookie('csrftoken');

$.ajaxSetup({
    beforeSend: function (xhr, settings) {
        if (!csrfSafeMethod(settings.type) && !this.crossDomain) {
            xhr.setRequestHeader("X-CSRFToken", csrftoken);
        }
    }
});

问题是,我不是从表单发送请求,而是使用按钮和onClick事件发送请求,因此在模板中不使用{ csrf }。因此,在我访问另一个页面(例如,登录页面)之前,不会设置cookie。我应该使用表单(这不是一个很好的主意,因为我在一个页面上有很多项,并且为每个表单创建了csrf令牌),或者有一种方法可以手动设置csrf cookie,如果没有设置它?谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-19 16:27:52

您始终可以在模板中的任何地方删除一个{% csrf_token %}隐藏表单字段,并在尚未设置cookie的情况下按名称获取该字段。您不必将其放入表单标记中才能成为有效的HTML。

只需将您的逻辑更改为如下内容:

代码语言:javascript
复制
var csrftoken == getCookie('csrftoken') || $(":input[name='csrfmiddlewaretoken']").val();

当然,这取决于getCookie返回的内容。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29148666

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档