下載安裝
pip install WTForms
主要概念
- Forms:Forms類是WTForms的核心容器。表單(Forms)表示域(Fields)的集合,域能通過表單的字典形式或者屬性形式訪問。
- Fields:Fields(域)做最繁重的工作。每個域(Field)代表一個數據類型,並且域操作強制表單輸入爲響應的數據類型。例如,
InputRequired
和StringField
表示兩種不同的數據類型。域除了包含的數據之外,還包含大量有用的屬性,例如標籤、描述、驗證錯誤的列表。 - Validators:Validators(驗證器)只是接受輸入,驗證它是否滿足某些條件,比如字符串的最大長度,然後返回。或者,如果驗證失敗,則引發
ValidationError
。這個系統非常簡單和靈活,允許在字段上鍊接任意數量的驗證器。 - Widget:Widget(組件)的工作是渲染域(field)的HTML表示。每個域可以指定Widget實例,但每個域默認擁有一個合理的Widget。
- CSRF:CSRF(Cross-site reqest forgery)跨站請求僞造。也被稱爲
one-click attack
或者session riding
,通常縮寫爲CSRF或者XSRF,是一種挾制用戶在當前已登錄的Web應用程序上執行非本意的操作的攻擊方法。跟跨網站腳本(XSS)相比,XSS利用的是用戶對指定網站的信任,CSRF利用的是網站對用戶網頁瀏覽器的信任。
基本使用
(1)創建表單類。
from wtforms import Form, BooleanField, StringField, validators
class RegisterForm(Form):
username = StringField('Username', [validators.Length(min=4, max=25)])
email = SringField('Email Address', [validators.Length(min=6, max=35)])
accept_rules = BooleanField('I accept the site rules', [validators.InputRequired()])
(2)實例化表單類。
@app.route('/register', methods=['GET', 'POST'])
def register():
form = RegisterForm(request.form) # 實例化表單類
if request.method = 'POST' and form.validate(): # 如果提交表單,並字段驗證通過
# 獲取字段內容
email = from.email.data
username = from.username.data
accept_rules = from.accept.data
# 省略其餘代碼
return render_template('register.html', form=form) # 渲染模板
(3)模板中渲染域。
<form method="POST" action="/login">
<div>{{ form.email.label }}:{{ form.email() }}</div>
<div>{{ form.username.label }}:{{ form.username() }}</div>
<div>{{ form.accept_rules.label }}:{{ form.accept_rules() }}</div>
</form>
上述代碼中,使用form.username.label
來獲取RegisterForm
類的username的名稱,使用form.username
來獲取表單中的username域信息。