全局、局部钩子用法

局部钩子用来实现name单个标签中的敏感字符检查
全局钩子用来实现password多个标签的密码一致性校验

  1. class form_view(forms.Form):
  2. name = forms.CharField(
  3. required=True, # 输入不能为空
  4. label="姓名:", # 页面上的input框名字
  5. initial="张三", # 框里的默认值
  6. help_text="输入姓名", # 帮助文本
  7. min_length=6,
  8. error_messages={"min_length":"长度最少6位","required":"输入值不能为空!"},
  9. widget=forms.widgets.TextInput()
  10. )
  11. password = forms.CharField(
  12. label="密码:",
  13. min_length=8,
  14. max_length=10,
  15. error_messages={"min_length": "长度最少8位","max_length":"长度最多10位" ,"required": "输入值不能为空!"},
  16. widget=forms.widgets.PasswordInput() # 秘文输入
  17. )
  18. r_password = forms.CharField(
  19. label="确认密码:",
  20. min_length=8,
  21. max_length=10,
  22. error_messages={"min_length": "长度最少8位","max_length":"长度最多10位" ,"required": "输入值不能为空!"},
  23. widget=forms.widgets.PasswordInput() # 秘文输入
  24. )
  25. # 局部钩子
  26. def clean_name(self):
  27. value = self.cleaned_data['name']
  28. if '中国' in value:
  29. raise ValidationError("含有敏感词汇: 中国")
  30. else:
  31. return value
  32. # 全局钩子
  33. def clean(self):
  34. value = self.cleaned_data
  35. p1 = value['password']
  36. p2 = value['r_password']
  37. if p1 != p2:
  38. self.add_error('r_password','两次输入不一致') # 给某个字段添加报错信息
  39. self.add_error('password','两次输入不一致')
  40. raise ValidationError("error") # 没用但是得写 raise

image.png