我正在使用AngularJS在前端和Django上编写应用程序作为后端的REST服务。我正在尝试使用POST请求发送一些JSON数据,但面临csrf-token问题(CSRF令牌丢失或不正确)。据我所知,以前我应该在Django上发出一个GET请求来获取这个令牌。所以我写了一个简单的观点:
def get_csrf_token(request):
return HttpResponse(json.dumps({'success': True}))
我添加了httpProvider默认值,并在角度应用程序启动时在视图上发出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请求。
答案 0 :(得分:0)
如果您的视图没有呈现包含csrf_token模板标记的模板,Django可能不会设置CSRF令牌cookie。这在表单动态添加到页面的情况下很常见。为解决这种情况,Django提供了一个视图装饰器,它强制设置cookie:ensure_csrf_cookie()。