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.
How to make Django accept '{' at the beginning of a request body?
it happen to me as well, following a tutorial, so i replaced this:
with just this:
seems to work (at least for me),hope that helps.