Django的form,model自定製

2022-07-04 14:48:13 字數 3733 閱讀 4833

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獲取成功的資料,字典型別正好對應資料 的批量操作

print

(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命令,如下 ...