我有一个有角度的表格,我想通过邮寄请求提交给我的django后端。常规的智慧是在你的愤怒应用上使用以下技巧:
angularApp.config(['$httpProvider', function ($httpProvider) {
$httpProvider.defaults.xsrfCookieName = 'csrftoken';
$httpProvider.defaults.xsrfHeaderName = 'X-CSRFToken';
}]);
但是,这需要您的cookie可以访问javascript。当您拥有django设置CSRF_COOKIE_HTTPONLY = True
时,如何从angular到django发布帖子请求?
请注意,这个问题也可以用于如何使用基于django会话的csrf令牌(例如使用https://github.com/mozilla/django-session-csrf)的角度,因为这具有相同的角度无法访问crsf令牌的问题饼干。
答案 0 :(得分:2)
免责声明:此答案适用于Django至1.9或者如果您在每个页面上使用单独的角度应用程序。这是因为Django 1.10更改了CSRF中间件以在每次请求后更改令牌。对于在Django 1.10+上运行的单页角应用程序,请参阅Pass Django CSRF token to Angular with CSRF_COOKIE_HTTPONLY
<强>答案:强>
在模板的某处,将csrf标记附加到您的窗口:
<script type='text/javascript'>
window.csrfmiddlewaretoken = "{{ csrf_token }}";
</script>
然后,您可以直接在帖子请求的标题上设置csrf标记而无需cookie:
angularApp.config(['$httpProvider', function ($httpProvider) {
$httpProvider.defaults.headers.post["X-CSRFToken"] = window.csrfmiddlewaretoken;
}]);