Django1.8文檔翻譯-Form-Overview

表單的使用

關於此文檔

此文檔提供基本的web表單介紹和Django中如何處理表單。關於更多的具體細節,能夠查閱更多詳細文檔。
除非你計劃構建的網站和應用不發佈任何內容,不接受用戶輸入的數據,不然你須要理解和使用表單。
Django提供一些工具和庫幫助你建立表單接收用戶的輸入,並處理和返回數據。html

HTML 表單

在HTML中,表單在<form>..</form>裏面收集用戶的輸入,例如一段文本,選擇按鈕等,而後發送輸入的信息到服務端。
一些表單接口元素,例如文本輸入複選框都很是的簡單而且是HTML內置的,其餘的要複雜不少好比界面彈出日期選擇器滑動滑塊,操縱這些特效一般會使用JavaScriptCSS來實現。
關於<input>元素,一個表單必須指定兩件事:程序員

  • where:用戶輸入數據所對應的URL如何返回
  • how:HTTP方法如何返回數據

一個例子,Django的Admin中有一個登錄表單,包含幾個<input>元素,type="text"對應usernametype="password"對應passwordtype="submit"對應登陸按鈕,還包含一些對用戶隱藏的文本字段,令Django決定接下來要幹什麼。web

GET和POST

GET和POST是處理表單過程當中惟一使用的HTML方法
Django的login表單使用POST方法,在瀏覽器中打包表單數據,編碼傳輸,將其發送給服務器,而後接收返回的響應。
對比GET,綁定提交的數據到字符串生成URL,在URL中包含數據必須發送的地址以及數據的鍵和值,若是你在文檔中搜索能夠在功能中看見,將會爲表單生成這樣的URL:
https://docs.djangoproject.com/search/?q=forms&release=1.
GETPOST一般用於不一樣目的
一個請求若是用來改變系統的狀態,例如:一個請求改變了數據庫,應該使用POSTGET應該在不會改變系統狀態的狀況下使用。
GET不適合用於密碼錶單,由於密碼會出如今URL裏,所以,在瀏覽器的歷史記錄和服務器日誌的純文本中會出現密碼。它也不能適用於大量的數據,相似圖片的二進制數據。一個web應用使用GET請求管理員表單會帶來安全風險,攻擊者會很容易的模仿表單請求獲取系統敏感信息,POST結合其餘的保護措施,提供更多的訪問控制,例如:CSRF protection
在其餘方面,GET適合web搜索表單,由於這個URL的GET請求能夠方便的存爲書籤、共享、提交。數據庫


Djano表單的做用

處理表單是一項複雜的業務,考慮Django管理員,衆多的數據和幾個不一樣的數據類型須要顯示在表單裏,渲染到HTML,使用方便的界面編輯,返回到服務器,驗證和清理,保存或進一步的加工處理。django

Django表單函數可使絕大部分的工做簡單化、自動化,而且比大多數程序員本身寫的代碼要安全。瀏覽器

Django處理3個不一樣的表單部分:安全

  • 預備和調整數據渲染頁面
  • 建立HTML表單數據格式
  • 接收處理客戶端提交的表單和數據

你可能想手動的完成這些功能,可是Django能夠幫你完成這些。服務器


Django表單

咱們簡要的描述HTML表單,可是HTML<form>只是一部分機械的要求。函數

在web應用程序的上下文,form多是指HTML<form>,或Djangoform類實例,或結構化數據提交時返回,或這些部位的端到端的集合。工具

Django表單類

這個系統組件的核心是Djangoform類,在Django模型中描述了類似的邏輯結構對象,它的行爲,form類描述表單如何工做和建立。

使用與model類類似的字段映射數據庫方式,form類字段映射HTML表單<input>元素。

表單的字段是類自己,它們管理表單數據, 提交的時候執行驗證。DateFieldFileField處理不一樣的數據,用它們作不一樣的事情。

一個表單字段表明一個用戶在瀏覽器中的widget(窗口部件)--用戶界面的機制,每一個字段類型有一個默認的Widget class,可是它們能夠按要求重寫。

實例化,處理,渲染表單

在Django渲染一個對象,咱們通常:

1.在視圖(view)中抓住它(從數據庫中取出)
2.傳送它到模版文件
3.擴大到使用模版變量的HTML標籤

在模版中渲染一個表單與渲染其餘對象很類似,可是有些鍵值不同。

模型實例中不包含數據,且幾乎不多在模版中作任何有用的事情,另外一方面,它塑造一種完美的感受渲染一個未填充的表單,咱們想要用戶填充它,這就是咱們想要的。

當咱們在view中處理一個模型實例,咱們一般在數據庫中檢索,當咱們處理一個表單咱們一般在view中實例化它

當咱們實例化一個表單,咱們能夠選擇讓它空着或者預填充,例如:

  • 數據表單保存在模型(model)實例
  • 咱們從其餘來源收集的數據
  • 之前的HTML表單提交接收的數據

剩下的這些案例都是很是有趣的,它讓用戶不僅是閱讀網頁,發送信息與網站交互。


創建一個表單

須要完成的工做
假設在你的網站上建立一個簡單的表單,獲取用戶的名字,你須要在模版(tempalte)中添加如下代碼:

<form action="/your-name/" method="post">
    <label for="your_name">Your name: </label>
    <input id="your_name" type="text" name="your_name" value="{{ current_name }}">
    <input type="submit" value="OK">
</form>

這些告訴瀏覽器返回表單數據到URL/your-name/,使用POST方法,它會顯示一個文本框,標記爲「your_name」,和一個按鈕標記爲「ok」,若是模版上下文包含一個current_name變量,將會預填充your_name字段。

你須要在view中渲染包含HTML表單的模版,而且能夠適當的綁定current_name字段

當表單提交以後,POST請求發送到服務器將包含表單數據。

如今你須要在view中處理相應的 /your-name/ URL映射,將會在請求發現相應的鍵/值對應,而後處理他們。

這是一個很是簡單的表單,在實踐中,一個表單可能包含幾十個甚至幾百個字段,這些可能須要預填充,咱們可能期待用戶在最後提交以前,分紅幾個週期編輯提交數據。

咱們可能須要一些驗證在瀏覽器中出現,即便在表單提交。咱們可能想要使用一些複雜的字段,容許用戶從日曆選擇日期等。

相關文章
相關標籤/搜索