引言:从一个“悲伤”的故事开始
想象一下这个场景:你,一个充满激情的(可能头发已经不太多的)后端程序员,正在用Django REST framework (DRF) 构建一个API。
你有一个Book模型,长这样:
# models.py
class Book(models.Model):
title = models.CharField(max_length=100)
author = models.CharField(max_length=50)
publish_date = models.DateField()
price = models.DecimalField(max_digits=5, decimal_places=2)
in_stock = models.BooleanField(default=True)
现在,你需要把这个模型的数据通过API返回成JSON。于是,你撸起袖子,开始“徒手”编写序列化器:
# serializers.py (手动版)
from rest_framework import serializers
class BookSerializer(serializers.Serializer):
id = serializers.IntegerField(read_only=True)
title = serializers.CharField(max_length=100)
author = serializers.CharField(max_length=50)
publish_date = serializers.DateField()
price = serializers.DecimalField(max_digits=5, decimal_places=2)
in_stock = serializers.BooleanField(default=True)
def create(self, validated_data):
# 一堆创建对象的代码...
return Book.objects.create(**validated_data)
def update(self, instance, validated_data):
# 一堆更新对象的代码...
instance.title = validated_data.get('title', instance.title)
# ... 为每个字段重复这个操作
instance.save()
return instance
有没有感觉血压上来了?
这简直就是“搬砖”式编程!模型里定义了一遍字段,序列化器里又几乎原封不动地重写了一遍。万一模型改了,这里还得跟着改。create和update方法更是枯燥的模板代码。
说好的DRY(Don‘t Repeat Yourself)原则呢?说好的程序员要优雅呢?
别慌!你的救世主——ModelSerializer,已经骑着七彩祥云来救你了!
一、ModelSerializer是何方神圣?
简单来说,ModelSerializer就是一个能根据你的模型,自动帮你生成序列化器的“智能代码生成器”。

最低0.47元/天 解锁文章
1744

被折叠的 条评论
为什么被折叠?



