Django之Forms元件之鉤子函式(HOOK)
阿新 • • 發佈:2022-03-24
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