我正在使用Django 1.7和django-rest-framework。
我制作了一个API,该API返回了一些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时,我得到:
--------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_exempt
rest_framework.permissions.AllowAny
我不知道是怎么回事。有人知道这个问题是什么吗?
使用SessionAuthentication时,你使用的是Django的身份验证,通常需要检查CSRF。Django REST Framework仅针对强制执行此操作,SessionAuthentication因此你必须在X-CSRFToken标头中传递CSRF令牌。
SessionAuthentication
X-CSRFToken
在Django文档提供了检索CSRF令牌使用jQuery和请求发送它的更多信息。CSRF令牌另存为一个cookie csrftoken,你可以从HTTP响应中检索该cookie,该cookie 随所使用的语言而异。
csrftoken
如果你无法检索CSRF cookie,通常表明你不应该使用SessionAuthentication。我建议根据你的需要研究TokenAuthentication或OAuth 2.0。