1. 做好準備工作
2. 安裝flask-wtf
flask-wtf對wtforms包進行了包裝,很好的整合到flask程式中。
在虛擬環境中使用pip工具安裝flask-wtf:
(venv) $ pip install flask-wtf
3. 配置檔案
# ... add more variables here as needed
用類的方式儲存配置變數有助於後續的拓展,在主目錄新建乙個名為 config.py 的python模組,把配置變數存在這裡:
import os
class config(object):
secret_key = os.environ.get('secret_key') or 'you-will-never-guess'
flask及一些其他的拓展將 secret_key 配置變數作為加密金鑰,用於生成簽名或令牌。flask-wtf用它來保護web表單免遭惡意攻擊,這叫跨站點請求偽造(cross-site request forgery / csrf,發音為「seasurf」)。顧名思義,金鑰應該是保密的,因為它所生成的令牌和簽名的強度取決於除了應用程式受信任的管理員之外沒人知道。
金鑰的值分為兩部分,用 or 連線,程式會先從環境變數中查詢 secret_key, 如果沒有,就會使用後面的硬編碼字串。這種模式在後面會頻繁使用。
from flask import flask
from config import config
4. 使用者登入表單
flask-wtf拓展用python類來代表web表單,以表單類的類變數的形式定義表單的字段。
下面是乙個登入表單:
from flask_wtf import flaskform此處匯入的四個代表表單字段型別的類是直接從wtforms包匯入的,每個欄位都是作為loginform類的類變數建立。每個欄位的第乙個引數代表簡介和標籤。from wtforms import stringfield, passwordfield, booleanfield, submitfield
from wtforms.validators import datarequired
class loginform(flaskform):
username = stringfield('username', validators=[datarequired()])
password = passwordfield('password', validators=[datarequired()])
remember_me = booleanfield('remember me')
submit = submitfield('sign in')
可選的 validators 引數用於驗證字段。datarequired驗證器用於檢測提交是否為空。
5. 表單模板
form.hidden_tag() 模板引數生成包含用於保護表單免受csrf攻擊的令牌的隱藏字段。
6. 表單檢視
下面編寫對映到 /login url的檢視函式:
from flask import render_template
# ...
def login():
form = loginform()
return render_template('login.html', title='sign in', form=form)
從 forms.py 匯入 loginform表單類,並將其實例化,form=form 向模板傳遞 form 物件。
7. 接收表單資料
from flask import render_template, flash, redirect
def login():
form = loginform()
if form.validate_on_submit():
flash('login requested for user {}, remember_me={}'.format(
form.username.data, form.remember_me.data))
return redirect('/index')
return render_template('login.html', title='sign in', form=form)
路由裝飾器中的methods引數代表這個檢視函式接收 get 和 post 請求,如果沒有顯式的定義,則預設接受 get 請求。
form.validate_on_submit() 方法進行所有的表單處理工作。當瀏覽器傳送的是 get 請求時,這個方法會返回false。
當瀏覽器傳送的是 post 請求時, form.validate_on_submit() 會對所有的資料進行相應的驗證,如果有任何乙個字段驗證沒通過,這個函式會返回false,如果驗證都通過,會返回 true, 並交由應用程式處理。
當 form.validate_on_submit() 返回的是 true, 登入檢視函式會呼叫兩個新的函式,從flask匯入。flash()函式可以向使用者提示資訊。
第二個函式是 redirect()。這個函式可以讓瀏覽器重定向到其他頁面。
microblog:
home
login
Flask學習筆記 使用Flask實現表單開發
使用html實現的表單 用flask實現相同功能的表單 coding utf 8 from flask import flask,request,render template,redirect from wtforms import form,textfield,passwordfield,val...
Flask學習筆記2 Web表單
web表單是web應用程式的基本功能。它是html頁面中負責資料採集的部件。表單有三個部分組成 表單標籤 表單域 表單按鈕。表單允許使用者輸入資料,負責html頁面資料採集,通過表單將使用者輸入的資料提交給伺服器。在flask中,為了處理web表單,我們一般使用flask wtf擴充套件,它封裝了w...
Flask學習筆記
web 發展至今,特別是伺服器端,涉及到的知識 內容,非常廣泛。這對程式設計師的要求會越來越高。如果採用成熟,穩健的框架,那麼一些基礎的工作,比如,網路操作 資料庫訪問 會話管理等都可以讓框架來處理,那麼程式開發人員可以把精力放在具體的業務邏輯上面。使用web框架開發web應用程式可以降低開發難度,...