全局、局部钩子用法
局部钩子用来实现name单个标签中的敏感字符检查
全局钩子用来实现password多个标签的密码一致性校验
class form_view(forms.Form):
name = forms.CharField(
required=True, # 输入不能为空
label="姓名:", # 页面上的input框名字
initial="张三", # 框里的默认值
help_text="输入姓名", # 帮助文本
min_length=6,
error_messages={"min_length":"长度最少6位","required":"输入值不能为空!"},
widget=forms.widgets.TextInput()
)
password = forms.CharField(
label="密码:",
min_length=8,
max_length=10,
error_messages={"min_length": "长度最少8位","max_length":"长度最多10位" ,"required": "输入值不能为空!"},
widget=forms.widgets.PasswordInput() # 秘文输入
)
r_password = forms.CharField(
label="确认密码:",
min_length=8,
max_length=10,
error_messages={"min_length": "长度最少8位","max_length":"长度最多10位" ,"required": "输入值不能为空!"},
widget=forms.widgets.PasswordInput() # 秘文输入
)
# 局部钩子
def clean_name(self):
value = self.cleaned_data['name']
if '中国' in value:
raise ValidationError("含有敏感词汇: 中国")
else:
return value
# 全局钩子
def clean(self):
value = self.cleaned_data
p1 = value['password']
p2 = value['r_password']
if p1 != p2:
self.add_error('r_password','两次输入不一致') # 给某个字段添加报错信息
self.add_error('password','两次输入不一致')
raise ValidationError("error") # 没用但是得写 raise