Django高階 表單 驗證

2021-09-14 04:53:59 字數 3338 閱讀 4097

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表單驗證的基類,封裝了乙個檢測使用者輸入是否全部通過的方法。該方法會先定義好錯誤資訊的字典,並會遍歷類的所有屬性 對應前端待驗證的輸入域 呼叫各自的驗證方法,將錯誤資訊 兩類,必要與否以及格式正確與否 存入字典...