国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

詳解Django中的form庫的使用

2020-01-04 18:02:34
字體:
供稿:網(wǎng)友

這篇文章主要介紹了詳解Django中的form庫的使用,Django是最為著名的Python編程框架,需要的朋友可以參考下

Django帶有一個(gè)form庫,稱為django.forms,這個(gè)庫可以處理我們本章所提到的包括HTML表單顯示以及驗(yàn)證。 接下來我們來深入了解一下form庫,并使用她來重寫contact表單應(yīng)用。

Django的newforms庫

在Django社區(qū)上會(huì)經(jīng)常看到django.newforms這個(gè)詞語。當(dāng)人們討論django.newforms,其實(shí)就是我們本章里面介紹的django.forms。

改名其實(shí)有歷史原因的。 當(dāng)Django一次向公眾發(fā)行時(shí),它有一個(gè)復(fù)雜難懂的表單系統(tǒng):django.forms。后來它被完全重寫了,新的版本改叫作:django.newforms,這樣人們還可以通過名稱,使用舊版本。 當(dāng)Django 1.0發(fā)布時(shí),舊版本django.forms就不再使用了,而django.newforms也終于可以名正言順的叫做:django.forms。

表單框架最主要的用法是,為每一個(gè)將要處理的HTML的``

`` 定義一個(gè)Form類。 在這個(gè)例子中,我們只有一個(gè)`` `` ,因此我們只需定義一個(gè)Form類。 這個(gè)類可以存在于任何地方,甚至直接寫在`` views.py`` 文件里也行,但是社區(qū)的慣例是把Form類都放到一個(gè)文件中:forms.py。在存放`` views.py`` 的目錄中,創(chuàng)建這個(gè)文件,然后輸入:

 

 

 
  1. from django import forms 
  2.  
  3. class ContactForm(forms.Form): 
  4. subject = forms.CharField() 
  5. email = forms.EmailField(required=False) 
  6. message = forms.CharField() 

這看上去簡單易懂,并且很像在模塊中使用的語法。 表單中的每一個(gè)字段(域)作為Form類的屬性,被展現(xiàn)成Field類。這里只用到CharField和EmailField類型。 每一個(gè)字段都默認(rèn)是必填。要使email成為可選項(xiàng),我們需要指定required=False。

讓我們鉆研到Python解釋器里面看看這個(gè)類做了些什么。 它做的第一件事是將自己顯示成HTML:

 

 
  1. >>> from contact.forms import ContactForm 
  2. >>> f = ContactForm() 
  3. >>> print f 
  4. <tr><th><label for="id_subject">Subject:</label></th><td><input type="text" name="subject" id="id_subject" /></td></tr> 
  5. <tr><th><label for="id_email">Email:</label></th><td><input type="text" name="email" id="id_email" /></td></tr> 
  6. <tr><th><label for="id_message">Message:</label></th><td><input type="text" name="message" id="id_message" /></td></tr> 

為了便于訪問,Django用``

默認(rèn)輸出按照HTML的<`` table`` >格式,另外有一些其它格式的輸出:

 

 
  1. >>> print f.as_ul() 
  2. <li><label for="id_subject">Subject:</label> <input type="text" name="subject" id="id_subject" /></li> 
  3. <li><label for="id_email">Email:</label> <input type="text" name="email" id="id_email" /></li> 
  4. <li><label for="id_message">Message:</label> <input type="text" name="message" id="id_message" /></li> 
  5. >>> print f.as_p() 
  6. <p><label for="id_subject">Subject:</label> <input type="text" name="subject" id="id_subject" /></p> 
  7. <p><label for="id_email">Email:</label> <input type="text" name="email" id="id_email" /></p> 
  8. <p><label for="id_message">Message:</label> <input type="text" name="message" id="id_message" /></p> 

請注意,標(biāo)簽

、

 

這些類方法只是一般情況下用于快捷顯示完整表單的方法。 你同樣可以用HTML顯示個(gè)別字段:

?

    、的開閉合標(biāo)記沒有包含于輸出當(dāng)中,這樣你就可以添加額外的行或者自定義格式。
 
  1. >>> print f['subject'
  2. <input type="text" name="subject" id="id_subject" /> 
  3. >>> print f['message'
  4. <input type="text" name="message" id="id_message" /> 

Form對象做的第二件事是校驗(yàn)數(shù)據(jù)。 為了校驗(yàn)數(shù)據(jù),我們創(chuàng)建一個(gè)新的對Form象,并且傳入一個(gè)與定義匹配的字典類型數(shù)據(jù):

 

 
  1. >>> f = ContactForm({'subject''Hello''email''adrian@example.com''message''Nice site!'}) 

一旦你對一個(gè)Form實(shí)體賦值,你就得到了一個(gè)綁定form:

 

 
  1. >>> f.is_bound 
  2. True 

調(diào)用任何綁定form的is_valid()方法,就可以知道它的數(shù)據(jù)是否合法。 我們已經(jīng)為每個(gè)字段傳入了值,因此整個(gè)Form是合法的:

 

 
  1. >>> f.is_valid() 
  2. True 

如果我們不傳入email值,它依然是合法的。因?yàn)槲覀冎付ㄟ@個(gè)字段的屬性required=False:

 

 
  1. >>> f = ContactForm({'subject''Hello''message''Nice site!'}) 
  2. >>> f.is_valid() 
  3. True 

但是,如果留空subject或message,整個(gè)Form就不再合法了:

  1. >>> f = ContactForm({'subject''Hello'}) 
  2. >>> f.is_valid() 
  3. False 
  4. >>> f = ContactForm({'subject''Hello''message'''}) 
  5. >>> f.is_valid() 
  6. False 

你可以逐一查看每個(gè)字段的出錯(cuò)消息:

 

 
  1. >>> f = ContactForm({'subject''Hello''message'''}) 
  2. >>> f['message'].errors 
  3. [u'This field is required.'
  4. >>> f['subject'].errors 
  5. [] 
  6. >>> f['email'].errors 
  7. [] 

每一個(gè)邦定Form實(shí)體都有一個(gè)errors屬性,它為你提供了一個(gè)字段與錯(cuò)誤消息相映射的字典表。

 

 
  1. >>> f = ContactForm({'subject''Hello''message'''}) 
  2. >>> f.errors 
  3. {'message': [u'This field is required.']} 

最終,如果一個(gè)Form實(shí)體的數(shù)據(jù)是合法的,它就會(huì)有一個(gè)可用的cleaned_data屬性。 這是一個(gè)包含干凈的提交數(shù)據(jù)的字典。 Django的form框架不但校驗(yàn)數(shù)據(jù),它還會(huì)把它們轉(zhuǎn)換成相應(yīng)的Python類型數(shù)據(jù),這叫做清理數(shù)據(jù)。

 

 
  1. >>> f = ContactForm({subject': Hello, email: adrian@example.com, message: Nice site!}) 
  2. >>> f.is_valid() 
  3. True 
  4. >>> f.cleaned_data 
  5. {message': uNice site!, email: uadrian@example.com, subject: uHello} 

我們的contact form只涉及字符串類型,它們會(huì)被清理成Unicode對象。如果我們使用整數(shù)型或日期型,form框架會(huì)確保方法使用合適的Python整數(shù)型或datetime.date型對象。


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 久治县| 永新县| 江孜县| 财经| 个旧市| 内丘县| 洪雅县| 德格县| 海城市| 台江县| 界首市| 自治县| 海宁市| 古浪县| 健康| 兴城市| 江永县| 宜城市| 百色市| 宁城县| 太原市| 阳曲县| 烟台市| 晋州市| 雅江县| 神农架林区| 阿图什市| 青浦区| 诸暨市| 永修县| 东源县| 兴文县| 兴义市| 仙桃市| 小金县| 永安市| 镇巴县| 五寨县| 商城县| 南澳县| 门源|