form.is_valid()
方法被呼叫時觸發驗證
def
is_valid
(self)
:pass
#最終層層呼叫會呼叫 self.full_clean()
deffull_clean
(self):.
..self._clean_fields(
) self._clean_form(
)def
_clean_fields()
:#驗證字段
for fileld in fields:
fileld.clean(
)#呼叫每個field的clean方法,驗證定義時的約束條件,min_length、unique等
self.cleaned_data[name]
= value # 將驗證後的值錄入clean_data
ifhasattr
(self,
'clean_%s'
% name)
:#if field有clean_欄位名()方法
value =
getattr
(self,
'clean_%s'
% name)()
#呼叫clean_欄位名()方法
self.cleaned_data[name]
= value #將驗證後的值錄入clean_data
def_clean_form
(self)
:#自定義驗證
try:
cleaned_data = self.clean(
)#呼叫自定義clean()方法
except validationerror as e:
#對錯誤資訊的處理
self.add_error(
none
, e)
else
:if cleaned_data is
notnone
: self.cleaned_data = cleaned_data
建立註冊功能,表單由django自帶form功能實現。
1.2.1 forms.py
class
registerform
(forms.form)
: uname = forms.charfield(max_length=
20, min_length=
6, label=
'使用者名稱'
, error_messages=,)
password = forms.charfield(max_length=8,
min_length=6,
widget=forms.passwordinput(attrs=),
error_messages=
, label=
'密碼',)
password_repeat = forms.charfield(widget=forms.passwordinput(
), label=
'確認密碼'
) email = forms.emailfield(label=
'郵件'
)def
clean
(self)
: clean_data =
super
(registerform, self)
.clean(
) password = clean_data.get(
'password'
) password_repeat = clean_data.get(
'password_repeat'
)if password_repeat != password:
msg =
'密碼不一致'
self.add_error(
'password_repeat'
, msg)
#指明錯誤源頭是password_repeat欄位
raise forms.validationerror(
'二次輸入密碼不匹配'
)#有了上一步可以不寫,這一行是為了學習add_error方法
1.2.2 views.py
def
register
(request)
:if request.method ==
'get'
: form = registerform(
)if request.method ==
'post'
: form = registerform(request.post)
#這一步已經會驗證一次
if form.is_valid():
#再次驗證
'註冊成功'
)return render(request,
'book/register.html'
,)
這裡有乙個問題,我沒能找出來原因。form = registerform(request.post)
這一行**執行後已經驗證了提交的資料,通過debug檢視form.errors
可知他呼叫了form.clean
;但當我再次用debug逐步除錯的時候,顯示他並未呼叫form.clean
。
1.2.3 register.html
1.2.4 執行結果
form物件驗證功能在建立例項或呼叫self.valid
方法時啟動,共分三步:
field.clean()
self.clean_fieldname()
self.clean()
關於驗證後錯誤資訊的處理方式,有兩個:
self.add_error(『field_name』, 『具體資訊』),通過raise forms.validationerror()實現,可以指定field_name。前端可以通過form.field.errors呼叫;
raise forms.validationerror(『具體資訊』),在self.errors中形式為,通過
}
呼叫
Django框架 表單驗證
表單是通過類實現的,繼承自forms.form,然後在裡面定義要驗證的字段.在表單中,建立欄位跟模型是一模一樣的,但是沒有null true或者blank true等這幾種引數了,有的引數是required true false.定義乙個form forms.py from django impor...
Django高階 表單 初識
form表單中的資料流動於前後端,需要驗證資料的合法性。django提供了form表單功能用於驗證資料合法性和建立html form表單功能類似於資料庫的模型功能,可看作乙個中介軟體。practise practise book forms.py urls.py class registerform...
Django中的Form表單驗證
前端有若干個input輸入框,將使用者輸入內容,以字典傳遞給後端。後端預先存在乙個form表單驗證的基類,封裝了乙個檢測使用者輸入是否全部通過的方法。該方法會先定義好錯誤資訊的字典,並會遍歷類的所有屬性 對應前端待驗證的輸入域 呼叫各自的驗證方法,將錯誤資訊 兩類,必要與否以及格式正確與否 存入字典...