DRF的Serializer
名词释义
序列化:模型转换为json,即对象-字典-json
反序列化:json转换为模型,即json-字典-对象
字段参数
默认使用模型中的字段约束进行校验,自定义字段约束参考Serializer fields
常用的约束包括:
通用参数
参数 含义 read_only = True
当前字段只能进行序列化输出(用于不需要反序列化输入的字段) write_only = True
当前字段只能进行反序列化输入,不进行序列化输出 required = True
在反序列化时是必填字段,默认为True allow_null = False
当前字段是否允许传None,默认是False(必填字段False,反之则True) allow_blank = False
当前字段是否运行为空,默认是False(必填字段False,反之则True) default = xx
指定在反序列化时,当前字段没值时所使用的默认值 validators=校验器
当前字段所使用的校验器(下面介绍常用的) error_messages
包含错误key-value的字段(下面会举例) label
当前字段在前端的api页面中所显示的字段名称 选项参数
参数 含义 max_length
字段最大长度 min_length
字段最小长度 trim_whitespace
是否截断空字符串 max_value
字段最大值 min_value
字段最小值
字段校验(反序列化)
对单个字段校验使用的是validate_<filed_name>
,如:
1 | def validate_name(self, value): |
对所有字段校验使用的是validate
,如:
1 | def validate(self,attr): |
校验顺序:
- 参数限定校验,(失败则不会向下校验)
- 单字段校验(无论成功或失败都会继续校验)
- 多字段校验
校验数据的使用:
1 | # 指定需要校验的数据 |
序列化
指定序列化字段:
1 | class Meta: |
指定单个字段进行自定义序列化:
1 | password = serializers.SerializerMethodField() |
对所有字段进行自定义序列化:
1 | def to_representation(self, instance): |
view使用序列化:
1 | # 对data进行序列化,data为queryset或者object,如果是queryset,需要加上many=True |
数据库写入操作
serializer提供了create和update的功能,分别对应post请求和put/patch请求。如:
1 | def update(self, instance, validated_data): |