组织 Django REST Framework 序列化程序的最佳实践是什么?

问题描述 投票:0回答:1

我正在致力于将旧版 REST api 迁移到 Django REST 框架。许多响应包含嵌套序列化器,例如:

class TemplateSerializer(serializers.ModelSerializer):
     colors = ColorSerializer(read_only=True, many=True)
     fonts = FontSerializer(read_only=True, many=True)
     property_ids = serializers.PrimaryKeyRelatedField(many=True, queryset=Property.objects.all())
...
     class Meta:
          model = Template
          fields = '__all__'

class ColorSerializer(serializers.ModelSerializer):
     swatch = SwatchSerializer(read_only=True)

    class Meta:
          model = Color
          fields = '__all__'

# and so forth, just imagine several serializers with fields that are read only or write only etc

目前我的所有序列化器都在

my_app/serializers.py
中,并且
serializers.py
文件已经变得太大而且杂乱无章。在该文件中,django 模型通常有多个版本的序列化器,例如,
list
视图方法可能具有与
retrieve
不同的序列化器,而
create
可能具有与
update
不同的序列化器,等等。单个 ViewSet 可能有 4-5 个不同的序列化器。此外,嵌套序列化器(如上面的
ColorSerializer
)可能具有不同的版本,具体取决于嵌套在另一个序列化器中时与调用
GET /colors
端点时的响应要求。

话虽这么说,我想开始组织/重构一些东西以提高可读性,尝试变得更加 DRY。我知道 API 的设计很糟糕,但由于需要花费大量时间,因此无法重新设计。清理我的

serializers.py
文件和序列化器类的最佳方法是什么?任何帮助和意见表示赞赏!谢谢

python django django-rest-framework django-serializer
1个回答
0
投票
在应用程序内

创建serializers名称包。为该应用程序的每个模型创建一个单独的序列化程序文件。不要忘记在 init.py 文件中导入序列化器。通过基于模型对序列化器文件进行分叉,可以轻松找到与特定模型 API 相关的序列化器。

© www.soinside.com 2019 - 2024. All rights reserved.