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      

 

posted @ 2022-03-24 21:56  _yessir  阅读(257)  评论(0编辑  收藏  举报