“detail”:“CSRF 失败:CSRF 令牌丢失或不正确。”
Posted
技术标签:
【中文标题】“detail”:“CSRF 失败:CSRF 令牌丢失或不正确。”【英文标题】:"detail": "CSRF Failed: CSRF token missing or incorrect." 【发布时间】:2014-02-26 22:33:10 【问题描述】:我正在使用 Tastypie 制作 RESTful API,当我尝试 POST/PUT/DELETE
一个请求时,它说:
。
GET
可以正常工作。我读过关于 SO 的各种帖子,说:
@csrf_exempt
或使用@method_decorator(csrf_exempt)
但两者都不起作用。
我怎样才能克服这个错误?
views.py
class SnippetList(mixins.ListModelMixin,
mixins.CreateModelMixin,
generics.GenericAPIView):
queryset = Snippet.objects.all()
serializer_class = SnippetSerializer
def get(self, request, *args, **kwargs):
return self.list(request, *args, **kwargs)
def post(self, request, *args, **kwargs):
request._dont_enforce_csrf_checks = True
print request.DATA
return self.create(request, *args, **kwargs)
serializer.py
from django.forms import widgets
from rest_framework import serializers
from snippets.models import Snippet, LANGUAGE_CHOICES, STYLE_CHOICES
class SnippetSerializer(serializers.ModelSerializer):
class Meta:
model = Snippet
fields = ('id', 'title', 'code', 'linenos', 'language', 'style')
urls.py
from django.conf.urls import patterns, url
from rest_framework.urlpatterns import format_suffix_patterns
from snippets import views
urlpatterns = patterns('',
url(r'^snippets/$', views.SnippetList.as_view()),
url(r'^snippets/(?P<pk>[0-9]+)/$', views.SnippetDetail.as_view()),
)
urlpatterns = format_suffix_patterns(urlpatterns)
【问题讨论】:
你试过了吗:csrfexemptmixin? 什么是braces
模块?
我从 github.com/brack3t/django-braces 安装了 braces
模块并重新运行 POST 请求,它仍然给我同样的错误。
您是否尝试过简单地关注 the instructions 以了解如何对您的请求进行 csrf 保护?我的意思是为什么要如此努力地避免它?
@yuvi - 我试过了,但没有任何效果。
【参考方案1】:
在 settings.py 中将 rest_framework 默认权限更改为 AllowAny
REST_FRAMEWORK =
'DEFAULT_PERMISSION_CLASSES': ('rest_framework.permissions.AllowAny',),
...
【讨论】:
我将DEFAULT_PERMISSION_CLASSES
设置为rest_framework.permissions.IsAuthenticated
,因为我只想允许注册用户访问API。我正在寻找另一种方法来解决这个 CSRF 问题。
同上一条评论以上是关于“detail”:“CSRF 失败:CSRF 令牌丢失或不正确。”的主要内容,如果未能解决你的问题,请参考以下文章
Django Rest Framework,ajax POST 工作,但 PATCH 抛出 CSRF 失败:CSRF 令牌丢失或不正确
djogo服务器上的dojox.form.Uploader 403错误
使用 Detail View 如何获取 Detail ViewController.m 文件中的选定行值?