通过我的AJAX帖子,我需要一些帮助来遵守Django的CSRF保护机制。我按照这里的说明做了:
http://docs.djangoproject.com/en/dev/ref/contrib/csrf/
我复制了该页面上的AJAX示例代码:
http://docs.djangoproject.com/en/dev/ref/contrib/csrf/#ajax
在xhr.setRequestHeader调用之前,我在打印getCookie('csrftoken')的内容时发出了一个警报,它确实填充了一些数据。我不确定如何验证令牌是否正确,但我很高兴它正在查找并发送某些内容
但是Django仍然拒绝我的AJAX帖子
以下是我的JavaScript:
$.post(“/memory/”,数据,函数(结果){
如果(结果!=“失败”){
获取随机卡();
}
否则{
警报(“无法保存卡数据”);
}
});
以下是我从Django身上看到的错误:
[23/Feb/2011 22:08:29]“POST/memory/HTTP/1.1”4032332
我肯定我遗漏了什么,也许很简单,但我不知道是什么。我搜索了这么多,看到了一些关于通过CSRF\u豁免decorator为我的视图关闭CSRF检查的信息,但我发现这没有吸引力。我已经尝试过了,而且效果很好,但如果可能的话,我宁愿让我的帖子按照Django设计的预期工作
为了以防万一,以下是我的观点的要点:
def myview(请求):
profile=request.user.profile
如果request.method==“POST”:
"""
处理后。。。
"""
返回HttpResponseRedirect(“/memory/”)
else:#request.method=='GET'
ajax=request.GET.has_键('ajax')
"""
一些无关的代码。。。
"""
如果是ajax:
response=HttpResponse()
profile.get_stack_json(响应)
返回响应
其他:
"""
获取要与页面内容一起发送的数据。
"""
返回render_to_response('memory/memory.html',
“我的数据”
上下文\实例=请求上下文(请求))
谢谢你的回复
如果使用$.ajax函数,只需在数据体中添加csrf标记即可:
$.ajax({
数据:{
somedata:“somedata”,
moredata:“moredata”,
csrfmiddlewaretoken:“{{csrf_令牌}”
},