Flask從入門到入土 三 Web表單

2021-09-20 07:37:36 字數 2989 閱讀 7867

flask-wtf擴充套件可以把處理web表單的過程變成一種愉悅的體驗。這個擴充套件對獨立的wtforms包進行了包裝,方便整合到flask程式中。

flask-wtf及其依賴可使用pip安裝:

1 pip install flask-wtf

跨站請求偽造保護

預設情況下,flask-wtf能保護所有表單免受跨站請求偽造的攻擊。惡意網站把請求傳送到被攻擊者已登入的其他網站時就會引發csrf攻擊。

為了實現csrf保護,flask-wtf需要程式設定乙個密匙。flask-wtf使用這個密匙生成加密令牌,再用令牌驗證請求中表單資料的真偽。設定密匙的方法如下: )

secret_key

'] = '

hard to guess string'

secret_key配置變臉是通用密匙,可在flask和多個第三方擴充套件中使用,如其名,加密強度取決與變數值的機密程度。不同的程式要使用不同的密匙,而且要保證其他人不知道你所用的字串。

為了增強安全性,密匙不應該直接寫入程式碼,而要儲存在環境變數中。

表單類使用flask-wtb時,每個web表單都由乙個繼承自form的類表示。這個類定義表單中的一組字段,每個欄位都用物件表示。字段物件可附屬乙個或多個驗證函式。驗證函式用來驗證使用者提交的輸入值是否符合要求。

1

from flask.ext.wtf import

form

2from wtforms import

stringfield,submitfield

3from wtforms.validators import

required45

class

nameform(form):

6 name = stringfield('

what is your name?

',validators=[required()])

7 submit = submitfield('

submit

')

這個表單中的字段都定義為類變數,類變數的值是響應字段型別的物件。在這個例項中,nameform表單中有乙個名為name的文字欄位和乙個名為submit的提交按扭。stringfield類表示屬性為type="text"的元素。submitfield類表示屬性為type="submit"的元素。字段建構函式的第乙個引數是把表單渲染成html時使用的標號。

stringfield建構函式中可選引數validators指定乙個由驗證函式組成的列表,在接受使用者提交的資料之前驗證資料。驗證函式required()確保提交的字段不為空。

form基類由flask-wtf擴充套件定義,所以從flask.ext.wtf中匯入。欄位和驗證函式卻可以直接從wtforms包中匯入。

wtforms支援的html標準字段如下:

—————————————————————————————

stringfield       文字字段

textareafield       多行文字字段

passwordfield      密碼文字字段

hiddenfield     隱藏文字字段

datefield      文字字段,值為datatime.date格式

datetimefield    文字字段,值為datatime.datetime格式

integerfield     文字字段,值為整數

decimalfield    文字字段,值為decimal.decimal

floatfield      文字字段,值為浮點數

booleanfield    核取方塊,值為true和false  

radiofield       一組單選框

selectfield      下拉列表

selectmultiplefield 下拉列表,可選擇多個值

filefield      檔案上傳字段

submitfield        表單提交按扭

formfield        把表單作為字段嵌入另乙個表單

fieldlist      一組指定型別的字段

—————————————————————————————

wtforms內建的驗證函式如下:

—————————————————————————————

email       驗證電子郵件位址

equalto      比較兩個欄位的值,常用與要求輸入兩次密碼進行確認的情況

ipaddress     驗證ipv4網路位址

length        驗證輸入字串的長度  

numberrange   驗證輸入的值在數字範圍內

optional        無輸入值時跳過其他驗證函式

required       確保欄位中有資料

regexp      確保正規表示式驗證輸入值

url          驗證url

anyof       確保輸入字在可選值列表

noneof       確保輸入值不在可選值列表

—————————————————————————————

把表單渲染成html

表單字段是可呼叫的,在模板中呼叫後會渲染成html。假設檢視函式把乙個nameform例項通過引數form傳入模板,在模板中可以生成乙個簡單的表單,如下:

1

<

form

method

="post"

>2}

3} } 4}

5form

>

當然這個表單還很簡陋。要想改進表單的外觀,可以把引數傳入渲染欄位的函式,傳入的引數會被轉換成欄位html屬性。例如,可以把字段指定id或class屬性,然後定義css樣式:

1

<

form

method

="post"

>2}

3} } 4}

5form

>

Flask從入門到入土 四 登入實現

1.表單標籤 宣告表單的範圍,位於表單標籤中的元素將被提交 語法 屬性 method 提交方式get,post enctype 編碼 action 提交方向 2.表單域 屬性 type,name,value 文字框 密碼框 文字區域 單選框 核取方塊 3.表單按扭 提交按鈕 復位按鈕 一般按鈕 程式...

Flask從入門到入土 四 登入實現

1.表單標籤 宣告表單的範圍,位於表單標籤中的元素將被提交 語法 屬性 method 提交方式get,post enctype 編碼 action 提交方向 2.表單域 屬性 type,name,value 文字框 密碼框 文字區域 單選框 核取方塊 3.表單按扭 提交按鈕 復位按鈕 一般按鈕 程式...

Linux從入門到入土

在此開個專題,用來記錄一下在使用linux中常用的命令。持續更新 常見錯誤 dpkg i 檔名cmake dcmake install prefix usr include ar 解包 tar zxvf filename.tar 打包 tar czvf filename.tar dirname gz...