Django4.0 使用表單-Django中的表單

2022-03-16 17:58 更新

我們已經(jīng)簡(jiǎn)單的描述過(guò)了HTML 表單,但是一個(gè)HTML?<form>?只是其所需的一部分。

在網(wǎng)絡(luò)應(yīng)用的上下文中,“表單”可能指的是那個(gè)HTML?<form>?,或者指產(chǎn)生它的 Django ?Form?,或者指它提交時(shí)返回的結(jié)構(gòu)化數(shù)據(jù),或者指這些部分的端到端工作集合。

Django的 Form 類

Django表單系統(tǒng)的核心組件是 ?Form ?類。它與Django模型描述對(duì)象的邏輯結(jié)構(gòu)、行為以及它呈現(xiàn)給我們內(nèi)容的形式的方式大致相同, ?Form ?類描述一張表單并決定它如何工作及呈現(xiàn)。
類似于模型類的字段映射到數(shù)據(jù)庫(kù)字段的方式,表單類的字段會(huì)映射到HTML表單的 ?<input>? 元素。 ?ModelForm ?通過(guò) ?Form ?映射模型類的字段到HTML表單的 ?<input>? 元素,Django admin就基于此。
表單字段本身也是類;他們管理表單數(shù)據(jù)并在提交表單時(shí)執(zhí)行驗(yàn)證。 ?DateField ?和 ?FileField ?處理的數(shù)據(jù)類型差別很大,所以必須用來(lái)處理不同的字段。
在瀏覽器中,表單字段以HTML控件(用戶界面的一個(gè)片段)的形式展現(xiàn)給我們。每個(gè)字段類型都有與之相匹配的 控件類 ,但必要時(shí)可以覆蓋。

實(shí)例化、處理和渲染表單

在Django中渲染一個(gè)對(duì)象的時(shí)候,我們通常:

  • 在視圖中獲取它(例如從數(shù)據(jù)庫(kù)中取出)
  • 將它傳遞給模板上下文
  • 使用模板變量將它擴(kuò)展為HTML標(biāo)記

在模板中渲染表單幾乎與渲染任何其他類型的對(duì)象的一樣,但是存在一些關(guān)鍵性的差異。

如果模型實(shí)例不包含數(shù)據(jù),在模板中對(duì)它做任何處理幾乎沒什么用。但完全有理由用來(lái)渲染一張空表單——當(dāng)我們希望用戶來(lái)填充的時(shí)候就會(huì)這么做。

所以當(dāng)我們?cè)谝晥D中處理模型實(shí)例時(shí),我們一般從數(shù)據(jù)庫(kù)中獲取它。當(dāng)我們處理表單時(shí),我們一般在視圖中實(shí)例化它。

當(dāng)我們實(shí)例化表單時(shí),我們可以選擇讓它為空或者對(duì)它預(yù)先填充,例如使用:

  • 來(lái)自已保存的模型實(shí)例的數(shù)據(jù)(例如在管理編輯表單的情況下)
  • 我們從其他來(lái)源獲取的數(shù)據(jù)
  • 從前面一個(gè)HTML 表單提交過(guò)來(lái)的數(shù)據(jù)

最后一種情況最有趣,因?yàn)檫@使得用戶不僅可以閱讀網(wǎng)站,而且還可以將信息發(fā)回給它。


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)