- 論壇徽章:
- 0
|
1.django的form系統(tǒng)現(xiàn)在包括oldforms,newforms,默認(rèn)forms指向oldforms.
newforms中包含主要包含fields(Field類(lèi),類(lèi)型集和表單框內(nèi)容的校驗(yàn)規(guī)則)、forms(Form類(lèi))、models(從models轉(zhuǎn)換為forms)、widgets(widget類(lèi),表單框的類(lèi)型)、util(主要有ValidationError異常類(lèi)),而__init__.py導(dǎo)入了newforms中的所有模塊的所有屬性。所以導(dǎo)入newforms系統(tǒng)時(shí),一般只需
from django import newforms as forms
2.從django標(biāo)準(zhǔn)Form類(lèi)繼承,建立新form類(lèi),其中可能還用到Field和Widget類(lèi),
如果要自定義表單框內(nèi)容的輸入校驗(yàn)規(guī)則,只需要定義一個(gè)新方法clean_XXX來(lái)定義自己的校驗(yàn)規(guī)則;
大致格式例:
from django import newforms as forms
class bookforms(forms.Form):
name=forms.CharField()
def clean_name(self):
name=self.clean_data.get('name','')
if ...:
raise forms.ValidationError('...')
return name
form類(lèi)實(shí)例對(duì)象(formobject)的is_valid()方法,可以判斷表單輸入內(nèi)容是否通過(guò)驗(yàn)證;
clean_data屬性和clean方法,得到一個(gè)字典對(duì)象,包含驗(yàn)證后的數(shù)據(jù)字典;
如果XXX驗(yàn)證不通過(guò),那么XXX的錯(cuò)誤信息將存儲(chǔ)在formobject.XXX.errors或者formobject.errors.XXX
3.templates中調(diào)用實(shí)例對(duì)象的as_p,as_table,as_ul方法將生成表單,但是這樣生成的表單顯示將有一定局限性,如果既想使用newforms系統(tǒng),又不想使用上述方法來(lái)自動(dòng)生成表單,那么在templates中自定義的表單每個(gè)結(jié)構(gòu)的名字都要和自建form類(lèi)的屬性名完全相同。這樣,我們就可以繼續(xù)使用newforms中的封裝方法。
本文來(lái)自ChinaUnix博客,如果查看原文請(qǐng)點(diǎn):http://blog.chinaunix.net/u1/54760/showart_1145327.html |
|