Django表單字段的驗證方式
阿新 • • 發佈:2017-08-04
doesn 針對 bsp 提交 turn except val object 重名
一、給表單的字段添加驗證器
In your forms.py
1 def validate_name(value): 2 try: 3 # 查詢存在的話拋出異常 4 User.objects.get(username=value) 5 raise ValueError("%s的用戶已經存在"%value) 6 except User.DoesNotExist: 7 pass 8 9 from blogapp.models import User 10 class Loginfm(forms.ModelForm):11 # 與ModelForm中字段重名不會添加,這裏用於給字段加驗證器 12 username=forms.CharField(validators=[validate_name]) 13 class Meta(): 14 model=User 15 exclude=("id",‘email‘)
如果username已經存於數據庫當中,提交時拋出已經存在的異常
二、clean_fieldname
針對某個字段進行驗證
In your forms.py
1 from blogapp.models import User 2 classLoginfm(forms.ModelForm): 3 4 # clean_username為User類的一個方法 5 # self代表表單自己 6 def clean_username(self): 7 value=self.cleaned_data.get("username") 8 try: 9 User.objects.get(username=value) 10 raise ValueError("%s的用戶信息已經存在"%value) 11 exceptUser.DoesNotExist: 12 pass 13 return value 14 15 class Meta(): 16 model=User 17 exclude=("id",‘email‘)
三、clean方法
可用於對整個表單進行驗證
In forms.py
1 from blogapp.models import User 2 class Loginfm(forms.ModelForm): 3 def clean(self): 4 # 調用父類的方法 5 # 獲取表單所有的數據 6 cleaned_data=super(Loginfm,self).clean() 7 value=cleaned_data.get("username") 8 try: 9 User.objects.get(username=value) 10 self._errors[‘username‘]=self.error_class(["%s已經存在"%value]) 11 12 except User.DoesNotExist: 13 pass 14 return cleaned_data 15 class Meta(): 16 model=User 17 exclude=("id",‘email‘)
可以適用註冊(兩次密碼匹配)
Django表單字段的驗證方式