django - 找不到 PUT 方法的 Django Rest Framwork CSRF cookie
问题描述
我开始使用 DRF,我为一些 CRUD 操作创建了一个基于类的视图,因此 GET 和 POST 方法工作正常,但是当我尝试从 Postman 发送 PUT 请求时,我收到以下错误:
Forbidden (CSRF cookie not set.): /post/1
我在as_view()
内部阅读了 csrf_exempt 调用,因此它应该免除 csrf 令牌问题,我也尝试使用方法装饰器,但效果不佳。
urls.py
...
url(r'^post$',PostView.as_view()),
#url(r'^post/(?P<pk>\d+)/$',PostView.as_view()),
...
意见.py ..
#-------- API for CRUD -----------------#
class PostView(APIView):
permission_classes = (IsAuthenticated,)
def get_object(self,pk,user_id):
try:
return Post.objects.get(pk=pk,user_id=user_id)
except Post.DoesNotExist:
raise Http404
def get(self,request):
post = Post.objects.get(user=request.user.id)
serializer = PostSerializer(post)
return Response({"success":True,"data":serializer.data},status=status.HTTP_200_OK)
def put(self, request, pk):
post = self.get_object(pk,request.user.id)
serializer = PostSerializer(post, data=request.data)
if serializer.is_valid():
serializer.save(user=request.user.id)
return Response(serializer.data)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
def post(self,request):
params = request.data
params['user'] = request.user.id
serializer = PostSerializer(data=request.data)
serializer.is_valid(raise_exception=True)
saved_data = self.perform_create(serializer)
post = PostSerializer(saved_data)
return Response({"success":True, "message":"Post Added Successfully","data":post.data}, status=status.HTTP_201_CREATED)
def perform_create(self, serializer):
return serializer.save()
...
有人可以告诉我,我要去哪里错了吗?
解决方案
我会尝试使用 aModelViewSet
来查看它是否有效。如果它有效,则问题出在您的class PostView(APIView):
. 如果它不起作用,问题将出在一些中间件、令牌、身份验证上。
推荐阅读
- python - Python:将文本文件解析为格式化的 json 文件
- ruby-on-rails - 服务调用未更新 Active Record 值以增加连接模型
- macos - 如何摆脱 AppleScript 中字符串的特定部分?
- oauth-2.0 - 基于 OAuth2 的 SSO
- python - 将 npArrays 转换为整数
- python - 为什么我不能访问另一台计算机上的简单 Python 服务器?
- python - p.stdout.readline() 在 True 时中断:
- css - 在 CSS 中使用 ::first-letter 时个性化 ::selection 不起作用
- javascript - 从 javascript JSON 解析 PHP 中的数组
- three.js - 如何使用带负近平面的 OrthographicCamera 的 Three.js Raycaster?