序列化器
在这里查看 Serializer 在数据库的ORM中的位置
和 Model 绑定的 Serializer,基本的工作流程和普通的 Serializer 还是一样的
要注意的是:一个 Model 的 ModelSerializer 是可以有很多个的,按需创建即可
# 在 Meta 里写 fields 只是指定“哪些字段要暴露/序列化”,但不改变字段的默认行为。 # 如果我们要为某个字段添加额外的验证器、显示规则、write_only、read_only 等,就需要单独在类属性里重新定义该字段。 class RegisterSerializer(serializers.ModelSerializer): username = serializers.CharField( validators=[UniqueValidator(queryset=User.objects.all(), message="用户名已存在")] ) password = serializers.CharField(write_only=True, min_length=8) class Meta: model = User fields = ("id", "username", "email", "password")
write_only=True # 我只用你给我的值来写入数据库,但我不会把你返回给别人(典型例子:密码)。 read_only=True # 这个值我只会返回给你看,但你传进来的时候我不会用它(典型例子:用户 ID、创建时间)。
数据库的Table是可以嵌套的:关系型数据库的关联表
同理 ModelSerializer 是可能嵌套使用的(嵌套使用容易引起N+1性能问题)
HyperlinkedModelSerializer:使用 超链接(URL) 来表示与其他对象的关系,外键关联字段(如 ForeignKey, ManyToManyField)会被序列化成关联对象的 URL,而不是主键(ModelSerializer使用主键)
DRF Serializer 的生命周期钩子: