1 """
2 在特定的节点自动触发完成响应操作
3
4 钩子函数在forms组件中就类似于第二道关卡,能够让我们自定义校验规则
5
6 在forms组件中有两类钩子
7 1.局部钩子
8 当你需要给单个字段增加校验规则的时候可以使用
9 2.全局钩子
10 当你需要给多个字段增加校验规则的时候可以使用
11 """
12 # 实际案例
13
14 # 1.校验用户名中不能含有666 只是校验username字段 局部钩子 def clean_xxx(self)
15
16 # 2.校验密码和确认密码是否一致 password confirm两个字段 全局钩子 def cleaned(self)
17
18 # 钩子函数 在类里面书写方法即可
19 from django import forms
20 class MyForm(forms.Form):
21 username = forms.CharField(min_length=3,max_length=8, label='用户名',error_messages={
22 'min_length':'密码最少3位',
23 'max_length':'密码多多8位',
24 'required':'用户名不能为空',
25 })
26 password = forms.CharField(min_length=3,max_length=8, label='密码',
27 error_messages={
28 'min_length':'密码最少3位',
29 'max_length':'密码多多8位',
30 'required':'密码不能为空',
31 })
32 confirm_password = forms.CharField(min_length=3,max_length=8, label='密码',
33 error_messages={
34 'min_length':'确认密码最少3位',
35 'max_length':'确认密码多多8位',
36 'required':'确认密码不能为空',
37 })
38 email = forms.EmailField(label='邮箱',error_messages={
39 'invalid':'邮箱格式错误',
40 'required':'邮箱地址不能为空',
41 })
42 # 局部钩子
43 def clean_username(self):
44 # 获取到用户名
45 username = self.cleaned_data.get('username')
46 if '666' in username:
47 # 提示前端展示错误信息
48 self.add_error('username','光喊666是不行滴~')
49 # 将钩子函数钩去出来数据再放回去,局部钩子返回给校验的字段
50 return username
51
52 # 全局钩子
53 def clean(self):
54 password = self.cleaned_data.get('password')
55 confirm_password = self.cleaned_data.get('confirm_password')
56 if not confirm_password == password:
57 self.add_error('confirm_password','两次密码不一致')
58 # 将钩子函数钩出来数据再放回去,全局的返回给cleaned_data
59 return self.cleaned_data
60