“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 的各种帖子,说:

删除 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 - 我试过了,但没有任何效果。 【参考方案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

使用 Detail View 如何获取 Detail ViewController.m 文件中的选定行值?

Django:如何检索“object_detail”通用视图选择的对象?

在 Splitview 中从一个 Detail View 控制器导航到另一个 Detail VC