Файл cookie CSRF Django Rest Framwork не найден для метода PUT - PullRequest
0 голосов
/ 24 января 2019

Я начинаю работать с DRF, я создал представление на основе классов для некоторых операций CRUD, поэтому методы GET и POST работают нормально, однако, когда я пытаюсь отправить запрос PUT от Postman, я получаю следующую ошибку:

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()),
...

views.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()
...

Может кто-нибудь сообщить мне, где я ошибаюсь?

1 Ответ

0 голосов
/ 24 января 2019

Я бы попробовал использовать ModelViewSet, чтобы посмотреть, работает ли он.Если это работает, проблема с вашим class PostView(APIView):.Если это не сработает, проблема будет в некотором промежуточном программном обеспечении, токене, аутентификации.

...