我正在使用django-rest-framework
并实施非常简单的post
CRUD API。
但问题是UpdateView
和DeleteView
发生csrf
错误
"detail": "CSRF Failed: CSRF token missing or incorrect."
奇怪的是,CreateView
不需要csrf
并且效果很好。
这是我的view
和serializer
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
答案 0 :(得分:0)
我喜欢使用的解决方案之一是通过指示Django在中间件级别执行此操作来强制删除任何和所有类型的CSRF检查。
为此,请创建一个新的中间件类,其中包含禁用CSRF检查的代码,并将中间件添加到要运行的现有中间件列表中。确保在Django使用的默认身份验证中间件之后添加自定义中间件(设置中的中间件顺序很重要)。
class CSRFDisablerMiddleware(object):
def process_request(self, request):
setattr(request, '_dont_enforce_csrf_checks', True)
小心我安全地使用此方法,因为我的应用程序受到其他身份验证方式的保护。如果您的项目需要在某些领域而不是其他领域进行CSRF认证,我不确定如何解决此问题。上述方法将在整个Django项目中禁用CSRF身份验证。