【问题标题】:Django - serialize complex context structure with models and dataDjango - 使用模型和数据序列化复杂的上下文结构
【发布时间】:2021-02-17 02:01:12
【问题描述】:

在 django 视图中,我希望能够序列化整个上下文,这通常用于发送到模板(通常通过调用 render 并传递 locals)。 我想试验 SPA+API 和继续前进的可能性,我想创建函数,将locals 序列化为 json 并将其作为 json 响应返回。

现在的问题是,本地通常是模型的列表、分布和查询集的混合。 我可以使用django.core.serializers 或使用 django-rest-framework 序列化模型。我可以使用 json 库将 dict 与原始类型进行序列化,但我不知道如何将它们混合在一起的任何简单方法。

理想的方法是通过 locals 字典并用它们的序列化表示替换所有找到的模型,然后将它们放在一起,甚至可能在哪个序列化器(在 drf 意义上)用于哪个模型之前指定。但我真的不想重新发明轮子,以防它已经存在。

另一个问题是 - 尝试这样做是否是个好主意?返回 json 上下文作为服务器端渲染的替代方案?我正处于原型设计阶段,所以我仍在考虑如何向前推进,我们感谢该领域的任何意见。

【问题讨论】:

    标签: json django django-rest-framework


    【解决方案1】:

    我会推荐使用 DRF

    • ModelSerializer 将返回一个 Json 编码的模型数组
    • SerializerDictField 将返回一个 Json 编码的 dict
    • SerializerListField 将返回一个 Json 编码的 list

    您可以创建 Serializer 字段是另一个 Serializer 用于嵌套目的。

    https://www.django-rest-framework.org/api-guide/fields/#composite-fields

    https://www.django-rest-framework.org/api-guide/serializers/#dealing-with-nested-objects

    对于你的问题,这是个好主意,我想说:

    • 如果您将数据推送到外部源(不是 django),那很好
    • 如果您将数据推送到 django 模板,这是个坏主意,您会失去很多 django 功能:(

    【讨论】:

    • 我知道这一点,但这需要我为每个视图创建序列化程序,即使我认为没有必要。在我看来,我需要做的就是为模型和其余部分(原始数据类型 + 列表/集合/字典)提供序列化程序。
    • 会起作用,(但您需要提供好的 ModelSerializer)但每个视图都会像掷硬币一样。如果你想用 API 来构建它,你需要更严格,否则你会浪费很多时间来调试
    猜你喜欢
    • 1970-01-01
    • 2011-02-15
    • 1970-01-01
    • 2016-09-26
    • 1970-01-01
    • 1970-01-01
    • 2018-03-31
    • 1970-01-01
    • 2017-04-25
    相关资源
    最近更新 更多