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的類表示。這個類定義表單中的一組字段,每個欄位都用物件表示。字段物件可附屬乙個或多個驗證函式。驗證函式用來驗證使用者提交的輸入值是否符合要求。
1from 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...