【问题标题】:Is there a way to return multiple json objects through django rest api?有没有办法通过 django rest api 返回多个 json 对象?
【发布时间】:2021-02-26 05:16:30
【问题描述】:

我知道,我可以通过 Django 视图集为任何方法返回单个对象。但是我可以通过 API 返回多个对象吗? 我有这样的事情:

class SomeViewSet(viewsets.ModelViewset):
    queryset = SomeModel.objects.all()
    serializer_class = SomeDataSerializer
    filter_backends = [DjangoFilterBackend,]
    permission_classes = (AllowAny,)

    @action(methods=['GET'], detail=False, url_path='some_path')
    def any_function(self, request):
        queryset = self.filter_queryset(self.get_queryset())
        result = any_function(args)
        return Response(result, status=status.HTTP_200_OK)

任何函数定义为:

def any_function(args):
    ...
    do something with args here and save it as result.
    ...
    return result

这工作非常顺利,我在这里没有任何问题。 但是我可以这样做吗:

def any_function(args):
    result = some processing of args
    next_result = another processing of args
    return result, next_result

仍然可以在 API 端点中获取响应,但现在是针对两个不同的数据。 还有如果 result 和 next_result 是两个不同的 JSON 对象呢?

【问题讨论】:

  • 将两者放在一个列表中,其在 json 中的等价物是一个数组。因此,您可以将它们作为数组发送给客户端。
  • 我应该在视图集外部还是内部的函数中执行此操作?我也可以在前端使用 JS 分别提取这些结果吗?
  • any_function 的第二个示例很好,即使在序列化为 json 时将元组转换为数组。您可以通过索引来访问这两个对象,就像在 JavaScript 中通常索引一样。
  • 好的,谢谢,我试试看。

标签: python django rest django-rest-viewsets


【解决方案1】:

您应该将它们作为数组发送:

How to Return an array of objects in a Django model

然后您可以在前端与数组进行交互。

【讨论】:

  • 它仍然适用于字典中传递的不同 JSON 对象吗?
  • 好的,我试试看。
【解决方案2】:

您可以创建一个列表,然后根据需要发送尽可能多的回复。 例如:

def any_function(args):
    data   = []
    result1 = some processing of args
    result2 = another processing of args
    result3 = some other prossesed response
    data.append(result1)
    data.append(result2)
    data.append(result3)
    return data

它将发送一个响应列表。

您还可以使用字典为每个响应命名,例如:

data.append({"result1":result1})
return data

通过为不同的响应命名,您将了解反序列化时响应的行为。

【讨论】:

    猜你喜欢
    • 2022-01-19
    • 2022-11-28
    • 1970-01-01
    • 2013-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-01
    相关资源
    最近更新 更多