Django之Forms组件之钩子函数(HOOK)
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