【问题标题】:django-rest-framwork UpdateView, DeleteView occurs csrf token error?django-rest-framework UpdateView,DeleteView出现csrf token错误?
【发布时间】:2016-09-06 20:52:08
【问题描述】:

我正在使用django-rest-framework 并实现非常简单的post CRUD API。

但问题是UpdateViewDeleteView发生csrf错误

"detail": "CSRF Failed: CSRF token missing or incorrect."

奇怪的是CreateView 不需要csrf 并且效果很好。

这是我的viewserializer

views.py

class PostEditAPIView(RetrieveUpdateAPIView):
    """
    http://example.com/posts/1/edit
    """
    queryset = Post.objects.all()
    serializer_class = PostUpdateSerializer
    lookup_url_kwarg = 'post_id'

serializer.py

class PostUpdateSerializer(serializers.ModelSerializer):

    class Meta:
        model = Post
        fields = [
            "title",
            "content",
        ]

我认为这对于源代码来说已经足够了。

点击PUT按钮后,

如何在 API 中处理csrf

  • 我没有碰任何关于Rest-framework的设置

【问题讨论】:

    标签: django django-rest-framework csrf


    【解决方案1】:

    我喜欢使用的解决方案之一是通过指示 Django 在中间件级别执行此操作来强制删除任何和所有类型的 CSRF 检查。

    为此,创建一个新的中间件类,其中包含禁用 CSRF 检查的代码,并将中间件添加到您现有的中间件列表中以运行。确保在 Django 使用的默认身份验证中间件之后添加自定义中间件(设置中的中间件顺序很重要)。

    class CSRFDisablerMiddleware(object):
    
        def process_request(self, request):
            setattr(request, '_dont_enforce_csrf_checks', True)
    

    注意我可以安全地使用此方法,因为我的应用程序使用其他身份验证方式受到保护。如果您的项目在某些领域而不是在其他领域需要 CSRF 身份验证,我不确定您将如何解决这个问题。上述方法将在整个 Django 项目中禁用 CSRF 身份验证。

    【讨论】:

      猜你喜欢
      • 2022-11-05
      • 2018-10-01
      • 2013-05-06
      • 2021-01-12
      • 2015-11-30
      • 2015-07-08
      • 2019-05-08
      • 2019-07-27
      • 2018-07-31
      相关资源
      最近更新 更多