django-rest-framwork UpdateView,DeleteView发生csrf令牌错误?

时间:2016-09-06 04:02:23

标签: django django-rest-framework csrf

我正在使用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",
        ]

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

enter image description here

点击PUT按钮后,

enter image description here

如何在API中处理csrf

  • 我没有触及有关Rest-framework
  • 的任何设置

1 个答案:

答案 0 :(得分:0)

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

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

class CSRFDisablerMiddleware(object):

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

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