反序列化_保存和局部钩子校验、全局钩子校验,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 	是否截断空白字符
---------------------------------
例如:
# 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中返回结果可以看到该字段,修改时,不需要传该字段
write_only	表明该字段仅用于反序列化输入,默认False,如果设置成True,postman中返回结果看不到该字段,修改时,该字段需要传

 

 


-------------------------------------------- ## 总结:反序列化校验执行流程       -1 先执行字段自己的校验规则----》最大长度,最小长度,是否为空,是否必填...      -2 validators=[方法,] ----》单独给这个字段加校验规则 例如这样的 name=serializers.CharField(validators=[方法,]) -3 局部钩子校验规则 -4 全局钩子校验规则
注:全局钩子和局部钩子理解
a.给某个字段再增加校验(固定用法),定义一个方法,格式为 validate_字段名
b.即限制多个字段之间的数据关系,如果写局部钩子不能限制住,因为局部钩子只能拿一条数据即只能限制名字或者只能拿到地址,不能同时拿到名字和地址,所以需要全局钩子(固定写法)定义一个方法validate
2.序列化组件修改数据
3.局部钩子校验

 


 

4.全局校验钩子

 


 5.validators实现不能以自定义字符开头:

posted on 2023-03-04 13:46  与太阳肩并肩  阅读(17)  评论(0编辑  收藏  举报

导航