Flask請求對象包含客戶端發出的所有請求信息。其中,request.form 能獲取POST 請求中提交的表單數據。盡管Flask 的請求對象提供的信息足夠用於處理Web 表單,但有些任務很單調,而且要重復操作。比如,生成表單的HTML 代碼和驗證提交的表單數據。Flask-WTF(http://pythonhosted.org/Flask-WTF/)擴展可以把處理Web 表單的過程變成一種愉悅的體驗。這個擴展對獨立的WTForms(http://wtforms.simplecodes.com)包進行了包裝,方便集成到Flask 程序中。Flask-WTF 及其依賴可使用pip 安裝:
pip install flask-wtf
使用Flask-WTF 時,每個Web 表單都由一個繼承自Form 的類表示。這個類定義表單中的一組字段,每個字段都用對象表示。字段對象可附屬一個或多個驗證函數。驗證函數用來驗證用戶提交的輸入值是否符合要求。
是一個簡單的Web 表單,包含一個文本字段和一個提交按鈕。
from flask.ext.wtf import Form from wtforms import StringField,SubmitField from wtforms.validators import Required class NameForm(Form): name = StringField('what is your name?',validators=[Required()]) submit = SUbmitField('submit')
Form 基類由Flask-WTF 擴展定義,所以從flask.ext.wtf 中導入。字段和驗證函數卻可以直接從WTForms 包中導入。
這個表單中的字段都定義為類變量,類變量的值是相應字段類型的對象。在這個示例中,NameForm 表單中有一個名為name 的文本字段和一個名為submit 的提交按鈕。StringField類表示屬性為type="text" 的<input> 元素。SubmitField 類表示屬性為type="submit" 的
<input> 元素。字段構造函數的第一個參數是把表單渲染成HTML 時使用的標號。StringField 構造函數中的可選參數validators 指定一個由驗證函數組成的列表,在接受用戶提交的數據之前驗證數據。驗證函數Required() 確保提交的字段不為空。
WTForms 支持的HTML 標准字段如下表
| 字段類型 | 說明 |
| StringField | 文本字段 |
| TextAreaField | 多行文本字段 |
| PasswordField | 密碼文本字段 |
| HiddenField | 隱藏文本字段 |
| DateField | 文本字段,值為datetime.date 格式 |
| DateTimeField | 文本字段,值為datetime.datetime 格式 |
| IntegerField | 文本字段,值為整數 |
| DecimalField | 文本字段,值為decimal.Decimal |
| FloatField | 文本字段,值為浮點數 |
| BooleanField | 復選框,值為True 和False |
| RadioField | 一組單選框 |
| SelectField | 下拉列表 |
| SelectMultipleField | 下拉列表,可選擇多個值 |
| FileField | 文件上傳字段 |
| SubmitField | 表單提交按鈕 |
| FormField | 把表單作為字段嵌入另一個表單 |
| FieldList | 一組指定類型的字段 |
WTForms驗證函數如下表:
| 驗證電子郵件地址 | |
| EqualTo | 比較兩個字段的值;常用於要求輸入兩次密碼進行確認的情況 |
| IPAddress | 驗證IPv4 網絡地址 |
| Length | 驗證輸入字符串的長度 |
| NumberRange | 驗證輸入的值在數字范圍內 |
| Optional | 無輸入值時跳過其他驗證函數 |
| Required | 確保字段中有數據 |
| Regexp | 使用正則表達式驗證輸入值 |
| URL | 驗證URL |
| AnyOf | 確保輸入值在可選值列表中 |
| NoneOf | 確保輸入值不在可選值列表中 |
