Django Rest框架 - 何时使用序列化程序类与模型序列化程序类

时间:2017-01-03 19:03:42

标签: django serialization django-rest-framework

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

是的我已多次浏览DRF网站上的教程,但我仍然遇到模糊不清

1 个答案:

答案 0 :(得分:2)

DRF tutorial上有一个很好的例子,在答案中需要花费太多时间,但我想提出一些观点。

首先,DRF文档解释了:

  

我们的SnippetSerializer类正在复制Snippet模型中包含的大量信息。如果我们能够使代码更简洁,那就太好了。

     

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

Snippet模型是该示例中使用的模型的名称。正如文档所说,我们可以使用Serializer作为快捷方式,而不是再次键入模型中的相同字段到ModelSerializer,我们可以使用{{1}简单地ModelForm

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

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

但是可能存在需要处理不遵守模型的数据的情况。这些数据将被发布到DRF视图,ModelSerializer将处理它们。这种情况可能是例如发送邮件消息,设置Celery任务,向会话添加数据,以及许多其他不涉及模型的情况。