Web框架——Flask系列之WTF表单验证练习(七)
生活随笔
收集整理的這篇文章主要介紹了
Web框架——Flask系列之WTF表单验证练习(七)
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
一、Web表單
web表單是web應(yīng)用程序的基本功能。
它是HTML頁面中負(fù)責(zé)數(shù)據(jù)采集的部件。表單有三個(gè)部分組成:表單標(biāo)簽、表單域、表單按鈕。表單允許用戶輸入數(shù)據(jù),負(fù)責(zé)HTML頁面數(shù)據(jù)采集,通過表單將用戶輸入的數(shù)據(jù)提交給服務(wù)器。
在Flask中,為了處理web表單,我們一般使用Flask-WTF擴(kuò)展,它封裝了WTForms,并且它有驗(yàn)證表單數(shù)據(jù)的功能。
WTForms支持的HTML標(biāo)準(zhǔn)字段:
WTForms常用驗(yàn)證函數(shù):
注意:使用Flask-WTF需要配置參數(shù)SECRET_KEY。
例如: app.config[‘SECRET_KEY’] = ‘silents is gold’
CSRF_ENABLED是為了CSRF(跨站請求偽造)保護(hù)。 SECRET_KEY用來生成加密令牌,當(dāng)CSRF激活的時(shí)候,該設(shè)置會(huì)根據(jù)設(shè)置的密匙生成加密令牌。
在HTML頁面中直接寫form表單:
#模板文件 <form method='post'><input type="text" name="username" placeholder='Username'><input type="password" name="password" placeholder='password'><input type="submit"> </form>視圖函數(shù)中獲取表單數(shù)據(jù):
from flask import Flask,render_template,request@app.route('/login',methods=['GET','POST']) def login():if request.method == 'POST':username = request.form['username']password = request.form['password']print username,passwordreturn render_template('login.html',method=request.method)使用Flask-WTF實(shí)現(xiàn)表單:
- myCode
01_wtf.py文件:
register.html文件:
<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>Title</title> </head> <body><form method="post">{{form.csrf_token}}{{form.user_name.label}}<p>{{form.user_name}}</p>{% for msg in form.user_name.errors %}<p>{{msg}}</p>{% endfor %}{{form.password.label}}<p>{{form.password}}</p>{% for msg in form.password.errors %}<p>{{msg}}</p>{% endfor %}{{form.password2.label}}<p>{{form.password2}}</p>{% for msg in form.password2.errors %}<p>{{msg}}</p>{% endfor %}{{form.submit}}</form> </body> </html>二、效果圖及目錄結(jié)構(gòu)
三、模板代碼
<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>Title</title> </head> <body><form method="post">{# 設(shè)置csrf_token #}{{ form.csrf_token() }}{{ form.username.label }}{{ form.username }}<br>{{ form.password.label }}{{ form.password }}<br>{{ form.password2.label }}{{ form.password2 }}<br>{{ form.submit }}<br></form> <!-- 使用遍歷獲取閃現(xiàn)的消息 get_flashed_messages()函數(shù)-->{% for message in get_flashed_messages() %}{{message}}{% endfor %} </body> </html>四、python代碼
from flask import Flask,render_template,request,flash # 導(dǎo)入wtf擴(kuò)展的表單類 from flask_wtf import FlaskForm# 導(dǎo)入自定義表單需要的字段 from wtforms import SubmitField,StringField,PasswordField# 導(dǎo)入wtf擴(kuò)展提供的表單驗(yàn)證器 from wtforms.validators import DataRequired,EqualTo# 解決編碼問題 # import sys # reload(sys) # sys.setdefaultencoding('utf-8')''' 使用WTF實(shí)現(xiàn)表單 自定義一個(gè)表單類 ''' app = Flask(__name__)app.secret_key = 'Zep03'# 自定義一個(gè)類,繼承自FlaskForm class LoginForm(FlaskForm):username = StringField(u'用戶名',validators=[DataRequired()])password = PasswordField(u'密碼',validators=[DataRequired()])password2 = PasswordField(u'確認(rèn)密碼',validators=[DataRequired(),EqualTo('password','密碼填入不一致')])submit = SubmitField('提交')@app.route('/form',methods=['GET','POST']) def login():login_form = LoginForm()# 1. 判斷請求方式if request.method == 'POST':# 2. 獲取請求參數(shù)username = request.form.get('username')password = request.form.get('password')password2 = request.form.get('password2')print(username)# 3. 驗(yàn)證參數(shù) 判斷參數(shù)是否填寫 以及 密碼是否相同# wtf 可以使用一句代碼就實(shí)現(xiàn)所有的校驗(yàn)# 當(dāng)表單提交時(shí)觸發(fā)validate_on_submit()函數(shù)if login_form.validate_on_submit():print(username,password)return 'success!'else:flash(u'參數(shù)有誤')return render_template('forms2.html',form=login_form)@app.route('/',methods=['GET','POST']) def forms():# request是一個(gè)請求對象,可以獲取請求方式、數(shù)據(jù)# 1. 判斷請求方式if request.method == 'POST':# 2. 獲取請求參數(shù)username = request.form.get('username')password = request.form.get('password')password2 = request.form.get('password2')print(username)# 3. 判斷參數(shù)是否填寫 以及 密碼是否相同if not all([username, password, password2]):# print('參數(shù)不完整')flash(u'參數(shù)不完整')elif password2 != password:# print('密碼不一致')flash(u'密碼不一致')else:return 'success'return render_template('forms.html')if __name__ == '__main__':app.run(debug=True)總結(jié)
以上是生活随笔為你收集整理的Web框架——Flask系列之WTF表单验证练习(七)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python自动化办公——xlrd、xl
- 下一篇: 一、快速开始一个 MyBatis项目(详