【问题标题】:Django PUT/PATCH request body is empty in RetrieveUpdateAPIViewRetrieveUpdateAPIView 中的 Django PUT/PATCH 请求正文为空
【发布时间】:2021-07-24 03:16:42
【问题描述】:

我正在尝试通过在标头中传递 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, 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)

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

邮递员: Postman

django 终端 说: Error

谁能解释我做错了什么?

UPD:

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

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

Echo of PUT request

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

【问题讨论】:

    标签: django django-request


    【解决方案1】:

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

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

    只有这个:

    serializer_data = request.data
    

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

    【讨论】:

    • 没有帮助。终端中仍然出现带有相同大括号错误的空字典...
    猜你喜欢
    • 1970-01-01
    • 2016-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-28
    • 1970-01-01
    • 2021-01-10
    • 1970-01-01
    相关资源
    最近更新 更多