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>
相關文章
相關標籤/搜索