1. 程式人生 > >Flask——WTF表單

Flask——WTF表單

Web表單

	Web表單是Web應用程式的基本功能。
	它是HTML頁面中負責資料採集的部件,表單有三個部分組成,表單標籤、表單域、表單按鈕。表單允許使用者輸入資料,負責HTML頁面資料採集,通過表單將使用者輸入的資料提交給伺服器。
	在Flask中,為了處理Web表單,我們可以使用Flask-WTF擴充套件 ,它封裝了WTForms,並且它具有驗證表單資料的功能。
	
	from flask import Flask,render_template
	# 匯入WTF提動的表單類
	from flask_wtf import FlaskForm
	# 匯入WTF擴充套件提供的表單欄位
	from wtforms import StringField,PasswordField,SubmitField
	# 匯入WTF擴充套件提供的驗證函式
	from wtforms.validators import DataRequired,EqualTo
	
	app = Flask(__name__)
	
	# 需求:實現簡單的頁面註冊,並獲取使用者輸入的註冊資訊
	# 1.自定義表單類,繼承WTF擴充套件提供的表單類
	# 例項化表單類物件,傳入模板
	# 3.在模板中使用wtf提供的表單
	# 設定金鑰
	app.config['SECRET_KEY'] = 'bswQyqXfuokWTElaAQnU6cGPIaTwPwNPiES5bAU/dnmWrqAl6WFeqOVRI+ca'
	
	class Form(FlaskForm):
	    user = StringField(validators=[DataRequired()])
	    pswd = PasswordField(validators=[DataRequired(),EqualTo('pswd2')])
	    pswd2 = PasswordField(validators=[DataRequired()])
	    subm = StringField('註冊')
	
	
	@app.route('/')
	def index():
	    # 例項化表單物件
	    form = Form
	    # 注意,要保證驗證器生效,需要呼叫函式來實現
	    # 如果引數滿足驗證器的要求,才獲取引數。如果不呼叫這個引數,會導致在from表單中中輸入的兩次密碼不一致也會接受資料。
	    # 不僅會驗證請求引數,還會驗證請求的表單域中是否由csrf_token,因此需要保證在模組檔案中設定一個必需引數{{form.csrf_token}}
	    if form.validate_on_submit():
	    # 獲取引數.request.form.get('user')
	        wtf_user = form.user.data
	        print(wtf_user)
	    return render_template('wtf.html',form = form)
	
	
	if __name__ == '__main__':
	    app.run(debug=True)

·

WTForms支援的HTML標準欄位

欄位物件 說明

StringField	文字欄位
TextAreaField	多行文字欄位
PasswordField	密碼文字欄位
HiddenField	隱藏檔案欄位
DateField	文字欄位,值為 datetime.date 文字格式
DateTimeField	文字欄位,值為 datetime.datetime 文字格式
IntegerField	文字欄位,值為整數
DecimalField	文字欄位,值為decimal.Decimal
FloatField	文字欄位,值為浮點數
BooleanField	複選框,值為True 和 False
RadioField	一組單選框
SelectField	下拉列表
SelectMutipleField	下拉列表,可選擇多個值
FileField	檔案上傳欄位
SubmitField	表單提交按鈕
FormField	把表單作為欄位嵌入另一個表單
FieldList	一組指定型別的欄位
WTForms常用驗證函式

驗證函式 說明

DataRequired	確保欄位中有資料
EqualTo	比較兩個欄位的值,常用於比較兩次密碼輸入
Length	驗證輸入的字串長度
NumberRange	驗證輸入的值在數字範圍內
URL	驗證URL
AnyOf	驗證輸入值在可選列表中
NoneOf	驗證輸入值不在可選列表中

注意:使用 Flask-WTF 需要配置引數 SECRET_KEY。
CSRF_ENABLED是為了CSRF(跨站請求偽造)保護。 SECRET_KEY用來生成加密令牌,當CSRF啟用的時候,該設定會根據設定的密匙生成加密令牌。