Django 不要在 AJAX GET from angularJS 上设置 CSRF 令牌

Django dont set CSRF token on AJAX GET from angularJS

我在前端使用 AngularJS 编写应用程序,在后端使用 Django 作为 REST 服务。我正在尝试使用 POST 请求发送一些 JSON 数据,但面临 csrf-token 问题(CSRF 令牌丢失或不正确)。据我所知,以前我应该在 Django 上发出 GET 请求以获取此令牌。所以我写了简单的观点:

def get_csrf_token(request):
    return HttpResponse(json.dumps({'success': True}))

我添加了 httpProvider 默认值,并且在 angular 应用程序开始时在视图上发出 GET 请求:

angular.module('app')
    .config(function($httpProvider){
        $httpProvider.defaults.xsrfCookieName = 'csrftoken';
        $httpProvider.defaults.xsrfHeaderName = 'X-CSRFToken';
    })
    .run(function($http){
        $http.get("http://127.0.0.1:8888/get_csrf_token/")
    })

但此视图未设置 CSRF 令牌,我仍然无法执行 POST 请求。

如果您的视图未呈现包含 csrf_token 模板标签的模板,Django 可能不会设置 CSRF 令牌 cookie。这在表单动态添加到页面的情况下很常见。为了解决这种情况,Django 提供了一个强制设置 cookie 的视图装饰器:ensure_csrf_cookie().