日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Web框架——Flask系列之WTF表单验证练习(七)

發(fā)布時(shí)間:2024/7/5 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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)表單:
  • 配置參數(shù):
  • app.config['SECRET_KEY'] = 'silents is gold'
  • 模板頁面:
  • <form method="post">#設(shè)置csrf_token{{ form.csrf_token() }}{{ form.us.label }}<p>{{ form.us }}</p>{{ form.ps.label }}<p>{{ form.ps }}</p>{{ form.ps2.label }}<p>{{ form.ps2 }}</p><p>{{ form.submit() }}</p>{% for x in get_flashed_messages() %}{{ x }}{% endfor %}</form>
  • 視圖函數(shù):
  • #coding=utf-8 from flask import Flask,render_template,\redirect,url_for,session,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 app = Flask(__name__) app.config['SECRET_KEY']='1'#自定義表單類,文本字段、密碼字段、提交按鈕 class Login(Form):us = StringField(label=u'用戶:',validators=[DataRequired()])ps = PasswordField(label=u'密碼',validators=[DataRequired(),EqualTo('ps2','err')])ps2 = PasswordField(label=u'確認(rèn)密碼',validators=[DataRequired()])submit = SubmitField(u'提交')@app.route('/login') def login():return render_template('login.html')#定義根路由視圖函數(shù),生成表單對象,獲取表單數(shù)據(jù),進(jìn)行表單數(shù)據(jù)驗(yàn)證 @app.route('/',methods=['GET','POST']) def index():form = Login()if form.validate_on_submit():name = form.us.datapswd = form.ps.datapswd2 = form.ps2.dataprint name,pswd,pswd2return redirect(url_for('login'))else:if request.method=='POST':flash(u'信息有誤,請重新輸入!')print form.validate_on_submit()return render_template('index.html',form=form) if __name__ == '__main__':app.run(debug=True)
    • myCode


      01_wtf.py文件:
    from flask import Flask,render_template,url_for,redirect,session from flask_wtf import FlaskForm from wtforms import StringField,PasswordField,SubmitField from wtforms.validators import DataRequired,EqualToapp = Flask(__name__)app.config["SECRET_KEY"] = "Zepppppppp"# 定義表單的模型類 class RegisterForm(FlaskForm):'''自定義的注冊表單模型類'''# 名字 驗(yàn)證器# DataRequired 保證數(shù)據(jù)必須填寫,并且不能為空user_name = StringField(label=u"用戶名",validators=[DataRequired(u"用戶名不能為空!")])password = PasswordField(label=u"密碼",validators=[DataRequired(u"密碼不能為空")])password2 = PasswordField(label= u"確認(rèn)密碼",validators=[DataRequired(u"確認(rèn)密碼不能為空"),EqualTo("password",u"兩次輸入的密碼不一致")])submit = SubmitField(label=u"提交")@app.route("/register",methods=["GET","POST"]) def register():# 創(chuàng)建一個(gè)表單對象,如果是post請求,前端發(fā)送了數(shù)據(jù),flask會(huì)把數(shù)據(jù)在構(gòu)造from對象的時(shí)候,存放到對象中form = RegisterForm()# 判斷form中的數(shù)據(jù)是否合理# 如果form中的數(shù)據(jù)完全滿足所有的驗(yàn)證器,則返回真,否則返回假if form.validate_on_submit():# 表示驗(yàn)證合格# 提取數(shù)據(jù)uname = form.user_name.datapwd = form.password.datapwd2 = form.password2.dataprint(uname,pwd,pwd2)# 把提取到的用戶名信息存進(jìn)session中session["user_name"] = unamereturn redirect(url_for("index"))return render_template("register.html",form=form)@app.route("/index") def index():user_name = session.get("user_name","")return "hello %s" % user_name#if __name__ == '__main__':app.run(debug=True)

    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)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。