我正在使用django-rest-framework
并实现非常简单的post
CRUD。
但问题是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",
]
我认为这对源代码来说已经足够了。
点击“放”按钮后,
如何在API中处理csrf
?
Rest-framework
的任何设置发布于 2016-09-06 04:52:08
我喜欢使用的解决方案之一是强制删除任何和各种类型的CSRF检查,方法是指示Django在中间件级别这样做。
为此,创建一个新的中间件类,其中包含禁用CSRF检查的代码,并将中间程序添加到要运行的现有中间件列表中。确保在Django使用的默认身份验证中间件(设置中的中间件顺序)之后添加自定义中间件。
class CSRFDisablerMiddleware(object):
def process_request(self, request):
setattr(request, '_dont_enforce_csrf_checks', True)
小心--我安全地使用这个方法,因为我的应用程序是使用其他身份验证方式进行保护的。如果您的项目在某些领域需要CSRF身份验证,而不是在其他领域,我不确定您将如何解决这个问题。上面描述的方法将在整个Django项目中禁用CSRF身份验证。
https://stackoverflow.com/questions/39340461
复制相似问题