1. 程式人生 > >Django表單字段的驗證方式

Django表單字段的驗證方式

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 class
Loginfm(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 except
User.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表單字段的驗證方式