当前位置: 首页 > 知识库问答 >
问题:

Django REST API在post请求中接受列表而不是字典

卢承弼
2023-03-14

我试图使用回调API中的数据,该API以以下格式发送POST请求:

[
  {
    "key1": "asd",
    "key2": "123"
  }
]

然而,我的API目前只在这样发送时工作:

{
  "key1": "asd",
  "key2": "123"
}
class RawIncomingDataSerializer(serializers.ModelSerializer):
    class Meta:
        model = RawIncomingData
        fields = '__all__'

views.py:

class RawIncomingDataViewSet(viewsets.ModelViewSet):
    queryset = RawIncomingData.objects.all()
    serializer_class = RawIncomingDataSerializer

post数据中只会有一个对象,所以我正在寻找一个简单的工作,而不必重写我的序列化程序来解释一个post请求中的多个对象。

共有1个答案

米树
2023-03-14

在这种情况下,您可以重写create并在get_serializer调用中显式指定many=true:

class RawIncomingDataViewSet(viewsets.ModelViewSet):
    ...
    def create(self, request, *args, **kwargs):
        serializer = self.get_serializer(data=request.data, many=True)
        serializer.is_valid(raise_exception=True)
        self.perform_create(serializer)
        headers = self.get_success_headers(serializer.data)
        return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers)
 类似资料:
  • 我正在尝试使用circe在Akka-Http应用程序中执行我的JSON(de)序列化,而不是Spray-JSON。因此,我想使用指令和来获取请求主体的字符串表示,然后执行自己的反序列化。但是似乎太聪明了,它拒绝任何内容类型不为的东西。 我现在明白了,我误解了,它只会缩小而不会扩大解封程序将接受的内容类型范围。这就解释了为什么我的解决方案不起作用。

  • 问题内容: 我有一个应用程序A,应该处理用POST方法提交的表单。发起请求的实际表单位于完全独立的应用程序B中。我正在使用Selenium测试应用程序A,并且我想编写一个测试用例以进行表单提交处理。 这该怎么做?可以完全在Selenium中完成吗?应用程序A没有可以启动此请求的表单。 请注意,该请求必须使用POST,否则我可以只使用WebDriver.get(url)方法。 问题答案: 使用sel

  • 问题内容: 我正在尝试允许javascript与Node.js服务器通信。 POST请求(Web浏览器) 现在,Node.js服务器代码如下所示。在用于GET请求之前。我不确定如何使其与POST请求一起使用。 服务器(Node.js) 在此先感谢您的帮助。 问题答案: 以下代码显示了如何从HTML表单读取值。正如@pimvdb所说,您需要使用request.on(’data’…)来捕获正文的内容。

  • 我想创建一个FastAPIendpoint,它只接受任意发布请求正文并返回它。 如果我发送,我想得到。但我也希望能够发送并取回它。 我试过了: 但是无论我发送什么,这都会返回一个空字典。 有什么想法吗?

  • 问题内容: 我正在使用HttpClient发出发布请求。我回到405方法不被允许。在提琴手中捕获轨迹时,它作为GET而不是POST发出! 我知道异步/等待问题。这是显示问题的简化示例。 是否存在某种可能会影响此的web.config或machine.config设置?其他请求(通过RestSharp发送)正确发送了帖子 这是提琴手捕获的东西。在提琴手中运行跟踪也会返回405(如预期)。手动将其切换