微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

RetrieveUpdateAPIView 中的 Django PUT/PATCH 请求正文为空

如何解决RetrieveUpdateAPIView 中的 Django PUT/PATCH 请求正文为空

我正在尝试通过在标头中传递 Jwt 令牌来更新用户。但是我的请求正文是空的。

View 将空数据传递给序列化器。

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,**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)

当我在 Postman 上运行 PUT 或 PATCH 请求时,我得到与令牌相关的未更改用户

邮递员: Postman

django 终端说: Error

有人能解释一下我做错了什么吗?

UPD:

我不知道为什么,但是 django 无法在 PUT 请求中收到“{”。

我在postman-echo.com/put中附和。 它回复了我发送的同一个正文。

Echo of PUT request

如何让 Django 在请求正文的开头接受 '{'?

解决方法

它也发生在我身上,按照教程,所以我替换了这个:

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

就这样:

serializer_data = request.data

似乎有效(至少对我而言),希望有所帮助。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。