Flask基礎(16)-->WTForms表單建立和簡單驗證

Flask基礎(16)-->WTForms表單建立和簡單驗證html

 

前言:使用Flask_WTF須要配置參數SECRET_KEY
CSRF_ENABLED是爲了CSRF(跨站請求僞造)保護。SECRET_KEY用來生成加密令牌,
當CSRF激活的時候,該設置會根據設置的祕鑰生成加密令牌。數據庫

下一篇我再爲你們詳細敘述一下CSRF相關內容。flask

下面是爲你們準備的一個示例案例:app

  1. WTForms_test.py(視圖頁)

    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)
  2. WTForms_test.html(模板頁)
    <!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>
相關文章
相關標籤/搜索