Python 如何使django服务器和angular客户端项目与CSRF保护不同

Python 如何使django服务器和angular客户端项目与CSRF保护不同,python,django,angularjs,django-csrf,csrf-protection,Python,Django,Angularjs,Django Csrf,Csrf Protection,我读过关于django和angular的不同博客,但它们都在django项目中有客户端(HTML+CSS+JS)代码 我只想创建两个项目:一个是所有客户端堆栈(HTML+JS+CSS),另一个是仅使用Django和Django rest框架。这意味着我可以在不同的项目中编写我的所有演示代码,在不同的项目中编写服务器代码,但使用RESTAPI将它们链接在一起 但是有一个威胁,我应该一直考虑CSDF,Django的CSRF中间件提供了很好的安全性。 那么,是否有可能将我的客户机代码放在Django项

我读过关于django和angular的不同博客,但它们都在django项目中有客户端(HTML+CSS+JS)代码

我只想创建两个项目:一个是所有客户端堆栈(HTML+JS+CSS),另一个是仅使用Django和Django rest框架。这意味着我可以在不同的项目中编写我的所有演示代码,在不同的项目中编写服务器代码,但使用RESTAPI将它们链接在一起

<>但是有一个威胁,我应该一直考虑CSDF,Django的CSRF中间件提供了很好的安全性。
那么,是否有可能将我的客户机代码放在Django项目目录之外,但仍然受到CSRF的保护?

阅读文档,所有内容都解释得很好。最干净的方法是在使用Ajax提交数据时,必须添加一个自定义头X-CSRFToken。可以从cookies解析令牌,顺便说一下,应该启用cookies。这里有一个链接到

文档总是找到问题的最佳地方,你只需阅读mate即可。但无论如何,这里有一个例子:

// Using the jquery cookie plugin, you can get the csrf token like this 
var csrftoken = $.cookie('csrftoken');
然后在javascript/Anuglar代码中,要发布或发出ajax请求,必须在发出post/PUT请求之前添加
X-CSRFToken
头:

// This HTTP method doesn't need protection since you will be reading and not pushing data
//   into the server
function csrfSafeMethod(method) {
    // these HTTP methods do not require CSRF protection
    return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));
}

// This is for setting up the upcoming ajax request, here you add the header with the
//   csrftoken you got it from the cookies
$.ajaxSetup({
    beforeSend: function(xhr, settings) {
        if (!csrfSafeMethod(settings.type) && !this.crossDomain) {
            xhr.setRequestHeader("X-CSRFToken", csrftoken);
        }
    }
});
NB:这是使用jQuery,您仍然可以使用Angular做同样的事情


在此之后,您可以进行Ajax调用,Django将愉快地接受您的请求,请再次说明,所有内容都已解释清楚,您已经包含了所有这些代码示例。

在文档中,我们必须首先获得CSRF令牌。在django中,我们将{%csrf_token%}放在模板文件中。但我希望我的angularjs完全分离,即不被django web框架呈现,该令牌将不会被替换。因此,如果不使用{%csrf_token%}代码,是否可以通过csrf Middleware进行保护您不必这样做,因为csrf_令牌是通过cookies传递的,您可以通过javascript/Angular.js代码访问它,但是请阅读文档,您将在那里找到更多信息,干杯。