假设我们规定name字段不能包含字符“X”,我们可以在类的外面定义一个函数,这个函数需要给定一个形参,用来接收待校验的数据,并且指定条件下要抛出serializers.ValidationError的异常,如果validators字段值的列表中有多个校验规则,校验过程中会全部进行校验,并以列表的形式返回一组异常校验信息 fromrest_frameworkimportserializer...
raise serializers.ValidationError("项目名称中不能包含测试")returnvalue # 要记住将value返回 全局钩子: def validate(self, attrs): #多字段联合校验iflen(attrs["name"]) ==8and"测试"notinattrs["tester"]: raise serializers.ValidationError("项目名称长度不为8并且tester中不包含测试")returnattrs 反序列...
DRF框架serializer反序列化校验之validators 反序列化过程中,除了校验字段类型和长度⼤⼩之外,还需要有其它的条件限制的校验,这时我们可以使⽤validators⾃定义校验项 ⼀、唯⼀字段校验 1.引⼊validators模块 from rest_framework import validators 2.在需要唯⼀校验的字段类⾥⾯设置validators字段的...
3-3重写 validate_字段名(self,value) 方法 单独针对某个字段进行验证 比如,我们还是对 name 字段进行验证,如果验证不通过,主动抛出「 serializers.ValidationError 」异常即可 def validate_name(self, name):""" 对name字段进行验证 :param name: :return: """ if "深圳" not in name: ...
def validate_title(self, value): # 对单一字段校验 if "BDYJY" not in value.upper(): return value raise serializers.ValidationError('标题里含有非法字符') # 抛出错误 def validate(self, attrs): # 对多个字段校验 # attrs是一个字典,里面是传过来的所有字段 ...
只做校验用 re_pwd = serializers.CharField(required=True) # 小结: # name,pwd,re_pwd为必填字段 # phone,sex为选填字段 # 五个字段都必须提供完整的校验规则,不然用户瞎传,电话号给你传个110可咋整 # 局部钩子:固定语法 validate_要校验的字段名(self, 当前要校验字段的值) # 校验规则:...
编写一个序列化的类!继承Serializer类,可以自己编写字段,设置校验 编写方式为: 自定义字段 再编写邮箱校验时,可以直接使用Django中的邮箱校验组件! 也可以自定义正则表达式,进行校验 编写字段钩子函数: 编写钩子方法def validate_email(self, value):进行校验 ...
drf序列化器serializer的具体使⽤ ⽬录 ⼀、序列化器-serializer ⼆、序列化器的使⽤ 简单使⽤ ⾼级使⽤ source **SerializerMethodField( ) ** 通⽤参数 三、反序列化数据校验 字段属性 局部钩⼦ 全局钩⼦ validators 四、序列化器操作数据 查询所有 查询单条 新增数据 修改数据 删除数据 五...
CharField(max_length=32, validators=[check, ]) def create(self, validated_data): # 调用Serializer必须重写create方法 res = models.Book.objects.create(**validated_data) return res def validate_title(self, data): # 局部钩子,带一个data,data就是改字段的数据 if data.startswith('sb'): raise ...
我们的站点是Vue前端/DRF后端。在serializer.validate()方法中,我需要通过编程确定TextChoices类中的哪个选项被指定为模型字段的默认值。 TextChoices类(缩写示例): class PaymentMethod(models.TextChoices): BANK_TRANSFER = 'Bank Transfer' CREDIT_CARD = 'Credit Card' ...