Templates(二)form表單與模板分離


Django的Forms類的作用是把用戶輸入的數據轉化成Python對象格式,便於后續操作(比如修改,驗證)。
 
-使用form類而不是在模版中寫表單的優點
1.所有的表單在一個文件里,非常便於后期維護,比如增添或修訂字段。
2.forms.py可通過clean方法自定義表單驗證,非常便捷
 
 
1.自定義表單
在app目錄下創建forms.py文件。類似於模型,Django表單也由各種字段組成。表單可以自定義(forms.Form),也可以由模型Models創建(forms.ModelForm)
 
-關於ModelForm
一般情況下,model和form是分開的(遵循松耦合的原則)。django中的ModelForm類支持在模型中創建表單。能不用盡量不用,因為違背了松耦合的核心思想
 
-class LoginForm(forms.Form):
 
2.表單的實例化
form = LoginForm(),實例化一個空表單,但里面沒有任何數據,可以通過 {{ form }}在模板中渲染。如果需要實例化一個帶有數據的表單對象,使用data參數添加數據,form = LoginForm(data=request.POST)
 
-在模板中渲染
 
 
3.使用form類的視圖函數的工作流程
 
(1)通過url調用view視圖
(2)若通過GET方式訪問,會調用一個空表單對象,來渲染出空的POST表單,並提交回來
(3)將POST得到的數據實例化到表單對象。通過is_vaild()函數(調用form類中的校驗函數);校驗數據是否合法,若合法則會序列化一個字典
 
*4.表單校驗
每個form的類都可以通過clean方法驗證表單。如果只想對某些字段進行驗證,通過[clean_字段名]方式自定義函數進行表單驗證(因為is_valid()默認自動調用這種名稱形式的檢驗函數,所以函數名是固定的)
 
* is_valid()的原理
源自:
1is_valid()先檢驗是否包含errors信息(從模板傳來)。若錯誤信息不為空,直接返回為False;否則執行(2
2is_valid()方法將數據返回到表單類cleaned_data屬性,以key-value形式存在。(這一步沒有校驗,只有數據的傳遞)
(3)is_valid()調用校驗函數,校驗后返回某值(通過校驗)或者拋出異常(沒通過校驗)
 
 
*5.文件上傳——使用表單上傳
與發送普通字段相似
(1)在forms.py中,設置表單的字段
file = forms.FileField(label=‘文件’, widget=forms.FieldInput)。一般表單不能只上傳一個文件,通常還要有其他字段,assist=forms.Field(label=‘’, widget=forms.HiddenInput, required=False)。這樣可以實現“只上傳文件”(只是看不到,而不是沒有)
(2)在模版文件中
<form>字段上必需有屬性enctype="multipart/form-data",否則表單不能發送文件,request.FILES為空。
(3)在views.py中接收並檢驗上傳的文件
form = UploadForm(request.POST, request.FILES)接收文件用request.FILES。其余校驗等過程,與表單普通字段一樣
 
 
6.widget參數
Django forms的每個字段都可以選擇輸入widget,比如多選,復選框,and so on。還可以定義每個widget的css屬性。用於頁面的美化


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM