【发布时间】:2014-08-31 05:43:53
【问题描述】:
我一直在 Django 之上开发一个主干层,并使用 Django 创建 API,并让主干模型调用 django api 来填充模型。我正在尝试使用用户的默认 django 模型为用户创建登录名。因为我不是通过 django 渲染页面,而是通过骨干网中的路由器。我无法通过 django 的模板语言 {{ csrf_token }} 生成 csrf 令牌,因此我无法发布任何表单。
我认为解决此问题的一种方法是通过在初始化时从 api 端点获取主干视图并让端点生成令牌来生成令牌
token = csrf._get_new_csrf_key()
然后通过 json 将其传递给主干前端,然后按照 django 文档进行操作
var csrftoken = "<%=obj.csrftoken%>";
function csrfSafeMethod(method) {
// these HTTP methods do not require CSRF protection
return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));
}
$.ajaxSetup({
beforeSend: function(xhr, settings) {
if (!csrfSafeMethod(settings.type) && !this.crossDomain) {
xhr.setRequestHeader("X-CSRFToken", csrftoken);
}
}
});
这不起作用,因为我仍然收到 Forbidden (403) CSRF 验证失败。请求中止。
任何帮助将不胜感激。谢谢
【问题讨论】:
标签: django backbone.js