欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解Django中的form庫的使用

 更新時(shí)間:2015年07月18日 09:34:37   投稿:goldensun  
這篇文章主要介紹了詳解Django中的form庫的使用,Django是最為著名的Python編程框架,需要的朋友可以參考下

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

Django的newforms庫

在Django社區(qū)上會(huì)經(jīng)??吹絛jango.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的`` <Form>`` 定義一個(gè)Form類。 在這個(gè)例子中,我們只有一個(gè)`` <Form>`` ,因此我們只需定義一個(gè)Form類。 這個(gè)類可以存在于任何地方,甚至直接寫在`` views.py`` 文件里也行,但是社區(qū)的慣例是把Form類都放到一個(gè)文件中:forms.py。在存放`` views.py`` 的目錄中,創(chuàng)建這個(gè)文件,然后輸入:

from django import forms

class ContactForm(forms.Form):
  subject = forms.CharField()
  email = forms.EmailField(required=False)
  message = forms.CharField()

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

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

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

為了便于訪問,Django用`` <label>`` 標(biāo)志,為每一個(gè)字段添加了標(biāo)簽。 這個(gè)做法使默認(rèn)行為盡可能合適。

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

>>> print f.as_ul()
<li><label for="id_subject">Subject:</label> <input type="text" name="subject" id="id_subject" /></li>
<li><label for="id_email">Email:</label> <input type="text" name="email" id="id_email" /></li>
<li><label for="id_message">Message:</label> <input type="text" name="message" id="id_message" /></li>
>>> print f.as_p()
<p><label for="id_subject">Subject:</label> <input type="text" name="subject" id="id_subject" /></p>
<p><label for="id_email">Email:</label> <input type="text" name="email" id="id_email" /></p>
<p><label for="id_message">Message:</label> <input type="text" name="message" id="id_message" /></p>

請注意,標(biāo)簽<table>、<ul>、<form>的開閉合標(biāo)記沒有包含于輸出當(dāng)中,這樣你就可以添加額外的行或者自定義格式。

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

>>> print f['subject']
<input type="text" name="subject" id="id_subject" />
>>> print f['message']
<input type="text" name="message" id="id_message" />

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

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

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

>>> f.is_bound
True

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

>>> f.is_valid()
True

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

>>> f = ContactForm({'subject': 'Hello', 'message': 'Nice site!'})
>>> f.is_valid()
True

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

>>> f = ContactForm({'subject': 'Hello'})
>>> f.is_valid()
False
>>> f = ContactForm({'subject': 'Hello', 'message': ''})
>>> f.is_valid()
False

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

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

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

>>> f = ContactForm({'subject': 'Hello', 'message': ''})
>>> f.errors
{'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ù)。

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

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

相關(guān)文章

  • Python日期格式和字符串格式相互轉(zhuǎn)換的方法

    Python日期格式和字符串格式相互轉(zhuǎn)換的方法

    這篇文章主要介紹了Python日期格式和字符串格式相互轉(zhuǎn)換的方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-02-02
  • python實(shí)現(xiàn)圖片,視頻人臉識(shí)別(opencv版)

    python實(shí)現(xiàn)圖片,視頻人臉識(shí)別(opencv版)

    這篇文章主要介紹了python實(shí)現(xiàn)圖像,視頻人臉識(shí)別(opencv版)的的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)python,感興趣的朋友可以了解下
    2020-11-11
  • python實(shí)現(xiàn)大文本文件分割成多個(gè)小文件

    python實(shí)現(xiàn)大文本文件分割成多個(gè)小文件

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)大文本文件分割成多個(gè)小文件,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-04-04
  • 淺析Python數(shù)據(jù)處理

    淺析Python數(shù)據(jù)處理

    本篇文章給大家分享了關(guān)于Python數(shù)據(jù)處理的相關(guān)內(nèi)容以及要點(diǎn)解釋,對此知識(shí)點(diǎn)有興趣的朋友可以參考學(xué)習(xí)下。
    2018-05-05
  • 簡單了解python反射機(jī)制的一些知識(shí)

    簡單了解python反射機(jī)制的一些知識(shí)

    這篇文章主要介紹了簡單了解python反射機(jī)制的一些知識(shí),反射機(jī)制就是在運(yùn)行時(shí),動(dòng)態(tài)的確定對象的類型,并可以通過字符串調(diào)用對象屬性、方法、導(dǎo)入模塊,是一種基于字符串的事件驅(qū)動(dòng)。,需要的朋友可以參考下
    2019-07-07
  • python實(shí)現(xiàn)文法左遞歸的消除方法

    python實(shí)現(xiàn)文法左遞歸的消除方法

    這篇文章主要介紹了python實(shí)現(xiàn)文法左遞歸的消除的方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-05-05
  • python占位符輸入方式實(shí)例

    python占位符輸入方式實(shí)例

    在本篇文章中小編給大家分享了關(guān)于python占位符怎么輸入的相關(guān)知識(shí)點(diǎn)內(nèi)容,有興趣的朋友們可以學(xué)習(xí)下。
    2019-05-05
  • 詳解Python變量與注釋高級用法

    詳解Python變量與注釋高級用法

    變量與注釋是表達(dá)作者思想的基礎(chǔ),他們對代碼質(zhì)量的貢獻(xiàn)母庸質(zhì)疑,這篇文章主要介紹了Python變量與注釋高級用法,需要的朋友可以參考下
    2022-08-08
  • pytorch 簡介及常用工具包展示

    pytorch 簡介及常用工具包展示

    Pytorch是torch的python版本,是由Facebook開源的神經(jīng)網(wǎng)絡(luò)框架,專門針對 GPU 加速的深度神經(jīng)網(wǎng)絡(luò)(DNN)編程,這篇文章主要介紹了pytorch 簡介及常用工具包展示,需要的朋友可以參考下
    2023-02-02
  • Python用正則表達(dá)式實(shí)現(xiàn)爬取古詩文網(wǎng)站信息

    Python用正則表達(dá)式實(shí)現(xiàn)爬取古詩文網(wǎng)站信息

    這篇文章主要給大家介紹了關(guān)于Python如何利用正則表達(dá)式爬取爬取古詩文網(wǎng)站信息,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-12-12

最新評論