我正在使用Django 1.7和django-rest-framework。CSRF失败:CSRF令牌丢失或不正确
我做了返回我一些JSON数据把这个在我settings.py
REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': ('rest_framework.permissions.AllowAny',),
'DEFAULT_RENDERER_CLASSES': (
# 'rest_framework.renderers.XMLRenderer',
'rest_framework.renderers.JSONRenderer',
# 'rest_framework.renderers.BrowsableAPIRenderer',
)
}
当我做GET调用,它返回我所有的数据,但是当我试图用PUT/PATCH我得到一个API:
--------Response Headers---------
Status Code: 403
Date: Wed, 29 Oct 2014 18:51:42 GMT
Vary: Cookie
Server: WSGIServer/0.1 Python/2.7.8
Allow: GET, POST, PUT, PATCH, HEAD, OPTIONS
X-Frame-Options: SAMEORIGIN
Content-Type: application/json
---------------------------------
--------Response Body-----------
{"detail": "CSRF Failed: CSRF token missing or incorrect."}
---------------------------------
这只发生在我登录时,如果我是匿名的,我可以正确地PUT/PATCH。
我与@csrf_exempt
试图和我的错误,我已经包括在设置中,rest_framework.permissions.AllowAny
...
我不知道发生了什么事情。有谁知道这个问题是什么?
我知道我应该给CSRF令牌,当我验证,但实际上我使用.NET Windows窗体应用程序与此API进行通信,并且它通过HTTPRequest和HTTPResponse方法进行GET调用,我不知道如何在这种情况下获得CSRF令牌,我不使用AJAX或HTML表单。 **编辑** .NET应用程序接收JSON格式的纯文本,并返回相同的 – 2014-10-29 20:54:54
你没事,用cookie我可以处理csrftoken并将其放回到标题数据中,所以我可以使PUT/PATCH调用,如果我登录。谢谢! – 2014-10-30 19:14:34
@AlexLordMordor您能解释一下您的解决方案吗?以及为什么当你是一个登录用户时它不工作,但以匿名方式工作。 (我有完全相同的问题) – 2015-03-30 04:59:28