Flask基礎(16)-->WTForms表單建立和簡單驗證html
前言:使用Flask_WTF須要配置參數SECRET_KEY
CSRF_ENABLED是爲了CSRF(跨站請求僞造)保護。SECRET_KEY用來生成加密令牌,
當CSRF激活的時候,該設置會根據設置的祕鑰生成加密令牌。數據庫
下一篇我再爲你們詳細敘述一下CSRF相關內容。flask
下面是爲你們準備的一個示例案例:app
from flask import Flask,render_template,request,flash # 導入wtf擴展的表單類 from flask_wtf import FlaskForm # 導入自定義表單須要的字段 from wtforms import SubmitField,StringField,PasswordField # 導入wtf擴展提供的表單驗證器 from wtforms.validators import DataRequired,EqualTo app = Flask(__name__) app.config["WTF_CSRF_ENABLED"] = False app.secret_key = "adfasfssdfdsf" # 自定義表單類,文本字段,密碼字段,提交按鈕 class RegisterForm(FlaskForm): username = StringField("用戶名:", validators=[DataRequired("請輸入用戶名")], render_kw={"placeholder": "請輸入用戶名"}) password = PasswordField("密碼:", validators=[DataRequired("請輸入密碼")],render_kw={"placeholder": "請輸入密碼"}) password2 = PasswordField("確認密碼:", validators=[DataRequired("請輸入確認密碼"), EqualTo("password", "兩次密碼不一致")],render_kw={"placeholder": "請確認密碼"}) submit = SubmitField("註冊") # 定義根路由視圖函數,生成表單對象,獲取表單數據,進行表單數據驗證 @app.route('/demo1',methods=["get","post"]) # 獲取表單的方式get和post均可以 def demo1(): register_form = RegisterForm() # 獲取表單對象 # 進行表單驗證 if register_form.validate_on_submit(): # 當submit表單提交時觸發驗證,那麼表單提交成功,即:全部驗證都經過觸發判斷 # username = request.form.get("username") # password = request.form.get("password") # password2 = request.form.get("password2") # 表單提交驗證經過,在此處能夠獲取表單數據,保存到數據庫,從而完成註冊 return "register success" # 返回給客戶端註冊成功的提示 else: if request.method == "POST": # 表單提交而且表單驗證失敗 flash("用戶名或者密碼錯誤") # 返回給客戶端失敗提示 return render_template("WTForms_test.html",form = register_form) # 將自定義表單數據提交給模板頁 if __name__ == '__main__': app.run(debug = True)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>WTForms_test</title> </head> <body> <form method="post"> {{ form.username.label }} {{ form.username }}<br/> # 由視圖函數獲取註冊表單對象register_form,而後經過render_template傳遞到模板,由form接收 {{ form.password.label }} {{ form.password }}<br/> {{ form.password2.label }} {{ form.password2 }}<br/> {{ form.submit }} </form> {% for message in get_flashed_messages() %} # 視圖函數中flash閃現過來的是一個消息隊列,能夠經過遍歷get_flashed_messsages()獲取 {{ message }} # 顯示flash閃現過來的消息 {% endfor %} </body> </html>