django框架提供了乙個form類,來處理web開發中的表單相關事項。眾所周知,form最常做的是對使用者輸入的內容進行驗證,為此django的forms類提供了全面的內容驗證和保留使用者上次輸入資料的支援。
form元件有2大大功能
對使用者提交的內容進行驗證(from表單/ajax)
保留使用者上次輸入的內容
form元件驗證的流程
obj=form()form元件類例項化時找到類中所有的字段 把這些字段 變成組合成字典;self.fields=
迴圈self.fields字典(自己寫的字段)for k,v in self.fields.items():,k是user,pwd,v是正規表示式
每次迴圈通過self.fields字典的鍵, 乙個乙個的去get前端post提交的資料 得到使用者輸入資料;input_value= request.post.get(『k』)(所以form欄位的名稱,要和前端的name屬性匹配)
每次拿到使用者輸入的資料 (input_value)和進行正規表示式匹配;
匹配成功flag=true 匹配失敗flag=falsh,最後 return flag obj.is_valid=flag。如果for自帶的規則和正則滿足不了驗證需求,可在form類中自定義方法,做擴充套件。
每個字段驗證通過後,每個欄位執執行self.clean_filelds函式(自定義 對form類中的字段做單獨驗證,比如去資料庫查詢判斷一下使用者提交的資料是否存在?)
執行form元件的clean_form方法進行整體驗證!(既然每個欄位都驗證了,就可以對使用者提交的資料做整體驗證了!比如進行聯合唯一的驗證)
最後執行類似 clean_form的post_clean方法結束驗證。(一般不使用post_clean做自定義過濾,clean_form方法完全可以解決)
form表單提交驗證
form表單(會發起 get)提交重新整理失去上次內容
#from驗證規則 使用者名稱 6-10字元 required不能為空
name=fields.charfield(max_length=10,
min_length=6,
required=true,
error_messages=
)#z注意name 必須和 from表單提交的一致,要麼二則怎麼對比校驗呢
pwd= fields.charfield(min_length=3,
required=true,
error_messages=
)defindex(request):
if request.method=='
get'
:
return render(request,'
login.html')
else
: obj=login(request.post) #
把客戶端提交來的form表單和 和匹配規則放在一起
res=obj.is_valid() #
自動校驗 給出結果 true 或者 false
if res: #
驗證成功後obj.cleaned_data獲取成功的資料,字典型別正好對應資料 的批量操作
(obj.cleaned_data)
return redirect('
') #
obj.errors獲取錯誤資訊(物件型別)就可以傳到前端顯示了!
else
:
return render(request,'
login.html
',)view code
aja提交驗證
ajax不會重新整理,上次輸入內容自動保留
#from驗證規則 使用者名稱 6-10字元 required不能為空
name=fields.charfield(max_length=10,
min_length=6,
required=true,
error_messages=
)#z注意name 必須和 from表單提交的一致,要麼二則怎麼對比校驗呢
動態生成html標籤,保留使用者上次輸入的內容
如何保留使用者上次輸入的內容?
由於form表單submit之後(傳送post請求) 資料提交到 後端,不管前端輸入的資料是否正確,服務端也要響應,所以頁面會重新整理;
所以無法保留使用者上次輸入的內容;如何解決呢?
把定義的定義的form類,例項化(obj=login() )內部呼叫乙個__str__的方法,如果沒有傳值 返回name='欄位名空的input標籤
把這個例項化之後的物件傳到前端顯示,讓使用者輸入值;使用者輸入值通過post方法提交到後台。
如果後台例項化乙個物件 obj=login(request.post)傳入了值, 然後後端再返回客戶端就可以看到使用者輸入的值了!
保留使用者上次輸入的內容 是利用了 obj=login(request.post)接收了使用者輸入的值
承上啟下 form元件的套路(執行流程):
(1)在後端定義類和字段,例項化form類;
(2)到使用者 傳送get請求時,服務端渲染到模板(空標籤/預設值)傳送到客戶端顯示
(3)客戶端填資料,post提交到後端;
(4)後端驗證,返回結果給前端;(切記form元件是在後端生成,傳送給客戶端顯示,客戶端填完資料在發回服務端!)
Django 一 Django環境的搭建
注意 以下操作預設都裝有python和pip環境!建議是python3.6以上版本 直接使用指令 pip install virtualenv安裝完成後,使用指令 virtualenv version如果能看到版本就是裝好了 virtualenv version 16.2.0這個環境為python的...
DJango的初識 ,什麼是Django?
什麼是django?django是乙個開放源 的web應用框架,由python寫成。採用了mtv的框架模式。python的web框架有django tornado flask 等多種,django相較與其他web框架其優勢為 大而全,框架本身整合了orm 模板引擎 快取 session等諸多功能。雖...
Django系列教程 一 Django的安裝和入門
註明 python版本為3.3.1 django版本為1.5.1,作業系統為windows7,其他版本有一些不同的地方讀者可以自行 安裝 python3.3.1 django1.5.1 python setup.py installlinux系統安裝需要使用root許可權,可以用sudo命令,如下 ...