【问题标题】:Django Rest Framework -A concrete example of when you would use a serializer class vs a model serializer classDjango Rest Framework - 何时使用序列化程序类与模型序列化程序类的具体示例
【发布时间】:2017-01-03 19:03:41
【问题描述】:

我正在学习 django rest 框架,虽然我了解序列化程序的作用以及何时使用它,但我无法完全满足对序列化程序和模型序列化程序类的需求。你们中的哪一个可以给我一个具体的真实世界示例用例吗?

是的,我已经多次阅读 DRF 网站上的教程,但我仍然感到模糊

【问题讨论】:

  • 我想改变我的问题,是否有一个真实的例子说明什么时候不应该使用模型序列化程序,而应该使用序列化程序类?当我们序列化不是来自我们的数据库的数据时?

标签: django serialization django-rest-framework


【解决方案1】:

DRF tutorial 上有一个很好的例子,回答起来会花很多时间,但我想提出几点。

首先,DRF 文档说明:

我们的 SnippetSerializer 类正在复制大量信息,这些信息也包含在 Snippet 模型中。如果我们可以让我们的代码更简洁一点,那就太好了。

与 Django 提供 Form 类和 ModelForm 类的方式相同,REST framework 包括 Serializer 类和 ModelSerializer 类。

片段模型是该示例中使用的模型的名称。所以正如文档所说,我们可以使用ModelSerializer作为快捷方式,而不是再次从模型中输入相同的字段到Serializer,就像我们使用ModelForm而不是简单的@ 987654325@.

但是正如您在评论中指出的那样,这基本上留下了“好的,那为什么还有一个简单的 Serializer 类?”的问题。

在绝大多数情况下,如果您有模型并且需要序列化/反序列化相关数据(通常是 JSON,但不限于),那么ModelSerializer 是可行的方法。即使需要额外的字段、相关的序列化程序或任意逻辑,ModelSerializer 也可以轻松调整。就我个人而言,在我的任何项目中,我从未想过 ModelSerializer 不适合与模型相关的数据。

但在某些情况下,您可能需要处理不符合模型的数据。此类数据将被发布到 DRF 视图,Serializer 将处理它们。例如,发送邮件、设置 Celery 任务、将数据添加到会话以及许多其他根本不涉及模型的情况。

【讨论】:

  • 看这就是我说的,这其实很有价值。谢谢
  • @amazingCarrotSoup 我很高兴这有帮助。
猜你喜欢
  • 2020-05-23
  • 2020-09-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-25
  • 2018-07-04
  • 1970-01-01
相关资源
最近更新 更多