我对一个瘦的tastypie层使用ajax调用到CRUD(使用csrf标记)。在我运行网站之前,一切都像魅力一样Chrome隐身模式。我一直在收到关于CUD请求的401。
查看请求cookie我发现sessionid cookie已设置,但csrftoken cookie未设置(如果我以正常模式运行,则设置正确)。
在settings.py
我有:
MIDDLEWARE_CLASSES = (
'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
)
任何人遇到这个问题都可以节省我一些时间吗?
非常感谢, 尔根
答案 0 :(得分:3)
我发现在Django的中间件文件csrf.py
中没有设置cookie的原因。在隐身模式下,if
下方的代码会启动,阻止设置Cookie:
if not request.META.get("CSRF_COOKIE_USED", False):
return response
我的解决方法是手动为tastypie的api.py
文件中的ModelResources设置此值:
class MyModelResource( ModelResource ) :
[..]
def wrap_view(self, view):
def wrapper(request, *args, **kwargs):
request.META["CSRF_COOKIE_USED"] = True
wrapped_view = super(MyModelResource, self).wrap_view(view)
return wrapped_view(request, *args, **kwargs)
return wrapper