1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
def  foo(request):
 
 
     if  request.method = = "POST" :
 
         regForm = RegForm(request.POST)
 
         if  regForm.is_valid():
             pass
             # 可用数据: regForm.cleaned_data,
             # 将数据插入数据库表中
 
 
         else :
             pass
             # 可用数据: regForm.errors
             # 可以利用模板渲染讲errors嵌套到页面中返回
             # 也可以打包到一个字典中,用于ajax返回
 
     else :
         regForm = RegForm()
     return  render(request, "register.html" ,{ "regForm" :regForm})
 
     
 
     '''
     实例化时:
 
         self.fields={
             "username":"字段规则对象",
             "password":"字段规则对象",
 
         }
 
 
     is_valid时:
 
         self._errors = {}
         self.cleaned_data = {}
 
 
         #局部钩子:
 
         for name, field in self.fields.items():
               try:
 
                     value = field.clean(value)
                     self.cleaned_data[name] = value
                     if hasattr(self, 'clean_%s' % name):
                         value = getattr(self, 'clean_%s' % name)()
                         self.cleaned_data[name] = value
               except ValidationError as e:
                     self.add_error(name, e)
 
         # 全局钩子:
 
         self.clean()     # def self.clean():return self.cleaned_data
 
         return  not self.errors    # True或者False
 
 
     '''   

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
from  django  import  forms
 
class  LoginForm(forms.Form):
     username  =  forms.CharField(label = 'username' , max_length = 100 )
     password  =  forms.CharField(label = 'password' , max_length = 100 )
     
     #钩子函数为对应字段添加判断条件
     def  clean_username( self ):
         if  len ( self .cleaned_data.get( "username" ))> 5 :
             print ( self .cleaned_data.get( "password" ))
             return  self .cleaned_data.get( "username" )
     def  clean_password( self ):
         pass
     #全局钩子函数
     def  clean( self ):
         if  self .cleaned_data[ "password" = =  self .cleaned_data[ "repeat_password" ]:
             return  self .cleaned_data