【发布时间】:2014-02-26 22:33:10
【问题描述】:
我正在使用 Tastypie 制作 RESTful API,当我尝试 POST/PUT/DELETE 一个请求时,它说:
“detail”:“CSRF 失败:CSRF 令牌丢失或不正确。”。
GET 可以正常工作。我读过关于 SO 的各种帖子,说:
- 删除 cookie
- 或使用
@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 - 我试过了,但没有任何效果。
标签: django tastypie django-csrf