【问题标题】:Api testing issue with JsonJson 的 API 测试问题
【发布时间】:2022-01-15 05:53:48
【问题描述】:

我是 Django Rest Framework 的新手,我认为我正确地完成了序列化程序和视图,它看起来像这样:

class MyAnimalSerializer(serializers.ModelSerializer):
    class Meta:
        model = MyAnimal
        fields = ('id', 'user', 'name', 'animal', 'race', 'birthyear',
                  'color', 'sex', 'height', 'father', 'mother', 'doc_num',)

class MyAnimalFormApi(APIView):

    permission_classes = (AllowAny,)

    def post(self, request):
        serializer = MyAnimalSerializer(data=request.data, many=True)
        if serializer.is_valid():
            serializer.save()
            return Response({"status": "success", "data": serializer.data}, status=status.HTTP_200_OK)
        else:
            return Response({"status": "error", "data": serializer.errors}, status=status.HTTP_400_BAD_REQUEST)

现在当我尝试用 Postman 测试它时

{ "data": { "name": "name", "animal": "dog"}, }

我得到{ "detail": "JSON 解析错误 - 期望用双引号括起来的属性名称:第 1 行第 47 列 (char 46)" }

但它用双引号引起来。 您是否知道出了什么问题或如何使其只能通过 {"name": "", "animal": ""} 而不是嵌套字典访问?

【问题讨论】:

    标签: python django api django-rest-framework


    【解决方案1】:

    删除结尾的逗号。

    >>> json.loads('{ "data": { "name": "name", "animal": "dog"}, }')
    ...
    JSONDecodeError: Expecting property name enclosed in double quotes: line 1 column 47 (char 46)
    

    应该是这个。

    { "data": { "name": "name", "animal": "dog"} }
    
    >>> json.loads('{ "data": { "name": "name", "animal": "dog"} }')
    {'data': {'name': 'name', 'animal': 'dog'}}
    

    【讨论】:

      【解决方案2】:

      我相信您收到此错误的原因是因为您需要在发送请求之前转储 json 数据。

      data = json.dumps(payload)
      

      payload 是您的数据字典。这会将其转换为字符串。

      【讨论】:

        猜你喜欢
        • 2017-09-25
        • 1970-01-01
        • 1970-01-01
        • 2014-11-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-09-19
        • 2013-10-01
        相关资源
        最近更新 更多