从Django为Backbone生成CSRF令牌

时间:2014-07-10 02:26:47

标签: django backbone.js

我一直在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验证失败,因此无法正常工作。请求中止。

任何帮助将不胜感激。感谢

1 个答案:

答案 0 :(得分:0)

最简单的解决方法是阅读csrftoken cookie并通过X-CSRFToken标头将其传递给django。 Django文档中的这个section应该给你正确的例子: