反序列化_保存和局部钩子校验、全局钩子校验,validators实现不能以自定义字符开头
1.序列化字段类型合集(CharField可以通用):
#1 BooleanField BooleanField()
#2 NullBooleanField NullBooleanField()
#3 CharField CharField(max_length=None, min_length=None, allow_blank=False, trim_whitespace=True)
#4 EmailField EmailField(max_length=None, min_length=None, allow_blank=False)
#5 RegexField RegexField(regex, max_length=None, min_length=None, allow_blank=False)
#6 SlugField SlugField(max_length=50, min_length=None, allow_blank=False) 正则字段,验证正则模式 [a-zA-Z0-9-]+
#7 URLField URLField(max_length=200, min_length=None, allow_blank=False)
#8 UUIDField UUIDField(format=’hex_verbose’) format: 1) 'hex_verbose' 如"5ce0e9a5-5ffa-654b-cee0-1238041fb31a" 2) 'hex' 如 "5ce0e9a55ffa654bcee01238041fb31a" 3)'int' - 如: "123456789012312313134124512351145145114" 4)'urn' 如: "urn:uuid:5ce0e9a5-5ffa-654b-cee0-1238041fb31a"
#9 IPAddressField IPAddressField(protocol=’both’, unpack_ipv4=False, **options)
#10 IntegerField IntegerField(max_value=None, min_value=None)
#11 FloatField FloatField(max_value=None, min_value=None)
#12 DecimalField DecimalField(max_digits, decimal_places, coerce_to_string=None, max_value=None, min_value=None) max_digits: 最多位数 decimal_palces: 小数点位置
#13 DateTimeField DateTimeField(format=api_settings.DATETIME_FORMAT, input_formats=None)
#14 DateField DateField(format=api_settings.DATE_FORMAT, input_formats=None)
#15 TimeField TimeField(format=api_settings.TIME_FORMAT, input_formats=None)
#16 DurationField DurationField()
#17 ChoiceField ChoiceField(choices) choices与Django的用法相同
#18 MultipleChoiceField MultipleChoiceField(choices)
#19 FileField FileField(max_length=None, allow_empty_file=False, use_url=UPLOADED_FILES_USE_URL)
#20 ImageField ImageField(max_length=None, allow_empty_file=False, use_url=UPLOADED_FILES_USE_URL)
----------重要-----------
ListField ListField(child=, min_length=None, max_length=None)
DictField DictField(child=)
#记住的:CharField IntegerField DecimalField DateTimeField BooleanField
ListField
DictField
2.常用字段参数:
选项参数:
# 参数的主要作用:主要就是做反序列化校验的,字段自己的规则!!!
# CharField及其子类(比如EmailField等)
max_length 最大长度
min_lenght 最小长度
allow_blank 是否允许为空
trim_whitespace 是否截断空白字符
---------------------------------
例如:
![](https://img2023.cnblogs.com/blog/2358807/202303/2358807-20230304130732467-529196430.png)
# IntegerField
max_value 最小值
min_value 最大值
---------------------------------
# 所有字段类都有的
required 表明该字段在反序列化时必须输入,默认True
default 反序列化时使用的默认值
allow_null 表明该字段是否允许传入None,默认False
validators 该字段使用的验证器
----看一眼忘掉-----
error_messages 包含错误编号与错误信息的字典
label 用于HTML展示API页面时,显示的字段名称
help_text 用于HTML展示API页面时,显示的字段帮助提示信息
---------------------------------
# 重点:
read_only 表明该字段仅用于序列化输出,默认False,如果设置成True,postman中返回结果可以看到该字段,修改时,不需要传该字段
![](https://img2023.cnblogs.com/blog/2358807/202303/2358807-20230305103204169-261773288.png)
write_only 表明该字段仅用于反序列化输入,默认False,如果设置成True,postman中返回结果看不到该字段,修改时,该字段需要传
![](https://img2023.cnblogs.com/blog/2358807/202303/2358807-20230305103549627-1635278425.png)
--------------------------------------------
## 总结:反序列化校验执行流程
-1 先执行字段自己的校验规则----》最大长度,最小长度,是否为空,是否必填...
-2 validators=[方法,] ----》单独给这个字段加校验规则
例如这样的 name=serializers.CharField(validators=[方法,])
-3 局部钩子校验规则
-4 全局钩子校验规则
注:全局钩子和局部钩子理解
a.给某个字段再增加校验(固定用法),定义一个方法,格式为 validate_字段名
b.即限制多个字段之间的数据关系,如果写局部钩子不能限制住,因为局部钩子只能拿一条数据即只能限制名字或者只能拿到地址,不能同时拿到名字和地址,所以需要全局钩子(固定写法)定义一个方法validate
2.序列化组件修改数据
![](https://img2023.cnblogs.com/blog/2358807/202303/2358807-20230304133617394-467667235.png)
3.局部钩子校验
![](https://img2023.cnblogs.com/blog/2358807/202303/2358807-20230304133628790-1994938116.png)
![](https://img2023.cnblogs.com/blog/2358807/202303/2358807-20230304133642542-1575451090.png)
4.全局校验钩子
![](https://img2023.cnblogs.com/blog/2358807/202303/2358807-20230304133650445-2128649187.png)
5.validators实现不能以自定义字符开头: