我的django应用程序使用ajax将项目添加到购物车中。ajax请求方法是POST,我通过js启用请求头:
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,如果没有设置它?谢谢。
发布于 2015-03-19 16:27:52
您始终可以在模板中的任何地方删除一个{% csrf_token %}隐藏表单字段,并在尚未设置cookie的情况下按名称获取该字段。您不必将其放入表单标记中才能成为有效的HTML。
只需将您的逻辑更改为如下内容:
var csrftoken == getCookie('csrftoken') || $(":input[name='csrfmiddlewaretoken']").val();当然,这取决于getCookie返回的内容。
https://stackoverflow.com/questions/29148666
复制相似问题