【发布时间】:2015-07-30 09:37:04
【问题描述】:
我正在尝试将 ajax 发布到我的 django 的后端,我收到“错误 403,禁止”,使用 AngularJS 作为前端。
我知道我必须通过我的帖子数据发送 csrf 令牌,但我的 django 视图没有检测到它。
我已经尝试了所有方法,因为在我的表单中使用了“{%csrf_token%}”,在我的 ajax 数据中使用了 {{csrf_token}},但我仍然遇到同样的错误。
查看.py
from django.views.decorators.csrf import *
def getCookie(request):
if request.method == 'GET':
data = django.middleware.csrf.get_token(request)
return JsonResponse(data, safe=False)
@csrf_protect
def guardarGrupo(request):
var = request.POST.get('csrfmiddlewaretoken', '')
if request.is_ajax() and request.method=='POST':
return HttpResponse(var)
`
urls.py
urlpatterns = patterns('',
url(r'^grupo/guardarGrupo/$', views.guardarGrupo, name='GuardarGrupo'),
url(r'^getCookie/$', views.getCookie, name='getCookie'),
...
settings.py
MIDDLEWARE_CLASSES = (
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
...
JS 文件
var token;
$.getJSON('http://127.0.0.1:8000/getCookie/', function(json) {
console.log("getjson:"+json);
token = json;
}).done(function() {
console.log("token:"+token );
$.ajax({
type: 'POST',
url: 'http://127.0.0.1:8000/grupo/guardarGrupo/',
data: {valor: 'hola',csrfmiddlewaretoken : token},
success: function(data) { alert('data: ' + data); },
error: function (error) { alert(token);},
});
});
angularjs(配置)
function csrfSafeMethod(method) {
// these HTTP methods do not require CSRF protection
return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));
}
angular.module('dService', [])
.config(['$httpProvider', function($httpProvider, $http) {
$httpProvider.defaults.useXDomain = true;
$httpProvider.defaults.withCredentials = true;
$httpProvider.defaults.xsrfCookieName = 'csrftoken';
$httpProvider.defaults.xsrfHeaderName = 'X-CSRFToken';
$httpProvider.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';
}
]);
两个 console.log 打印相同。但是,我的 django 视图没有返回。 我感谢所有的帮助。谢谢。
【问题讨论】:
-
您确定没有看到任何控制台日志错误吗?
-
@karthikr 是的,我检查了 chrome 上的 console.log 并在表单数据中显示:valor:'something', csrfmiddlewaretoken:'Qgdxhxh243 ...'。这就是为什么我不明白为什么 Django 返回 403。我错过了什么?
标签: jquery ajax django angularjs post