我的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,如果不是组?感谢。
答案 0 :(得分:0)
您可以随时在模板中的任意位置删除{% csrf_token %}
隐藏的表单字段,如果尚未设置Cookie,则按名称选择。您不必将其放在表单标记内作为有效的HTML。
只需将您的逻辑更改为:
var csrftoken == getCookie('csrftoken') || $(":input[name='csrfmiddlewaretoken']").val();
这当然取决于getCookie
返回的内容。