0

I'm trying to update user by passing Jwt token in header. But body of my request is empty.

View passes empty data to serializer.

views.py

class UserRetrieveUpdateAPIView(RetrieveUpdateAPIView):
    permission_classes = (IsAuthenticated,)
    renderer_classes = (UserJSONRenderer,)
    serializer_class = UserSerializer

    def retrieve(self, request, *args, **kwargs):
        serializer = self.serializer_class(request.user)
        return Response(serializer.data, status=status.HTTP_200_OK)

    def update(self, request, *args, **kwargs):
        serializer_data = request.data.get('user', {})
        print(f'request data: {request.data}') # prints empty dic {}
        serializer = self.serializer_class(
            request.user, data=serializer_data, partial=True
        )
        serializer.is_valid(raise_exception=True)
        serializer.save()

        return Response(serializer.data, status=status.HTTP_200_OK)

When I run PUT or PATCH request on Postman, I get unchanged user which is related to a token.

postman: Postman

django terminal says: Error

Can someone explain what am I doing wrong?

UPD:

I don't know why, but django can't receive '{' in PUT request.

I echoed in postman-echo.com/put. It responded the same body I sent.

Echo of PUT request

How to make Django accept '{' at the beginning of a request body?

1 Answers1

0

it happen to me as well, following a tutorial, so i replaced this:

serializer_data = request.data.get('user', {})

with just this:

serializer_data = request.data

seems to work (at least for me),hope that helps.

taha maatof
  • 1,862
  • 2
  • 9
  • 23