【问题标题】:How to receive data from user Django Rest Framework如何从用户 Django Rest Framework 接收数据
【发布时间】:2021-09-25 16:15:23
【问题描述】:

我想从用户那里接收数据并传递处理后的版本。例如用户传递 JSON:

{"first number": 3, 

"second number": 4}, 

并且 Web API 应该响应添加的数字,例如 {"result": 7}。不写数据库怎么办?

我的 serializer.py 看起来像:

class AdditionSerializer(serializers.Serializer):
    first = serializers.CharField()
    second = serializers.CharField()

views.py:

class AdditionView(APIView):
    @action(detail=False)
    def get_addition(self, request):
        try:
            serializer = AdditionSerializer(data=request.data)
            if serializer.is_valid():
                first = serializer.validated_data(['first'])
                second = serializer.validated_data(['second'])
                response = {'result': first+second}
                return Response(response, status=status.HTTP_200_OK)
            else:
                return Response({"message":"error"})
        except:
            None

但它不起作用

【问题讨论】:

  • 你得到什么输出?
  • 什么不起作用?
  • @RezaHeydari { "detail": "方法 \"GET\" 不允许。" }

标签: python django api django-rest-framework


【解决方案1】:

@action 装饰器不适用于 APIView,您必须使用带有视图集的操作删除它并将方法更改为 get

class AdditionView(APIView):
    def get(self, request, *args, **kwargs):
        try:
            serializer = AdditionSerializer(data=request.data)
            if serializer.is_valid():
                first = serializer.validated_data(['first'])
                second = serializer.validated_data(['second'])
                response = {'result': first+second}
                return Response(response, status=status.HTTP_200_OK)
            else:
                return Response({"message":"error"})
        except:
            None

我想提到的另一件事是将序列化程序更改为使用IntergerField 而不是CharField

【讨论】:

  • 谢谢。它帮助了我
【解决方案2】:

在您的情况下,自定义视图端点/API 将有助于获得响应。 由于您使用的是 APIView,因此您可以使用附加逻辑覆盖 post 方法并发送回 JSON 响应。

【讨论】:

    猜你喜欢
    • 2018-09-22
    • 1970-01-01
    • 2015-09-15
    • 2022-01-24
    • 2020-03-30
    • 2017-03-16
    • 2023-03-31
    • 2020-12-25
    • 2019-07-02
    相关资源
    最近更新 更多