flask學習筆記代碼篇-12

flask13-WTF表單

Web 表單是 Web 應用程序的基本功能。
它是HTML頁面中負責數據採集的部件。表單有三個部分組成:表單標籤、表單域、表單按鈕。表單允許用戶輸入數據,負責HTML頁面數據採集,通過表單將用戶輸入的數據提交給服務器。
在Flask中,爲了處理web表單,我們可以使用 Flask-WTF 擴展,它封裝了 WTForms,並且它有驗證表單數據的功能
WTForms支持的HTML標準字段

字段對象

說明

StringField

文本字段

TextAreaField

多行文本字段

PasswordField

密碼文本字段

HiddenField

隱藏文件字段

DateField

文本字段,值爲 datetime.date 文本格式

DateTimeField

文本字段,值爲 datetime.datetime 文本格式

IntegerField

文本字段,值爲整數

DecimalField

文本字段,值爲decimal.Decimal

FloatField

文本字段,值爲浮點數

BooleanField

複選框,值爲True 和 False

RadioField

一組單選框

SelectField

下拉列表

SelectMutipleField

下拉列表,可選擇多個值

FileField

文件上傳字段

SubmitField

表單提交按鈕

FormField

把表單作爲字段嵌入另一個表單

FieldList

一組指定類型的字段

WTForms常用驗證函數

驗證函數

說明

DataRequired

確保字段中有數據

EqualTo

比較兩個字段的值,常用於比較兩次密碼輸入

Length

驗證輸入的字符串長度

NumberRange

驗證輸入的值在數字範圍內

URL

驗證URL

AnyOf

驗證輸入值在可選列表中

NoneOf

驗證輸入值不在可選列表中

使用 Flask-WTF 需要配置參數 SECRET_KEY。
CSRF_ENABLED是爲了CSRF(跨站請求僞造)保護。 SECRET_KEY用來生成加密令牌,當CSRF激活的時候,該設置會根據設置的密匙生成加密令牌。

from flask import Flask, render_template, request, flash
from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField, SubmitField
from wtforms.validators import DataRequired, EqualTo

app = Flask(__name__)
app.secret_key = 'bvdhkbdvskhbvdsh'  # 這個值隨意輸入
'''
/根節點是普通表單、 demo1是WTF表單,使用兩種表單提交,驗證其過程以及閃現消息的捕獲。
'''


# 表單類
class RegisterForm(FlaskForm):
    username = StringField('用戶名:', validators=[DataRequired()])
    password = PasswordField('密碼:', validators=[DataRequired()])
    password2 = PasswordField('確認密碼:', validators=[DataRequired(), EqualTo('password', '密碼填入的不一致')])
    submit = SubmitField('提交')


@app.route('/demo1', methods=["get", "post"])
def demo1():
    regist_form = RegisterForm()
    if regist_form.validate_on_submit():  # 內置校驗,關聯RegisterForm類中的validators屬性的所有驗證
        # 1. 取到註冊所對應的數據
        username = request.form.get("username")
        password = request.form.get("password")
        password2 = request.form.get('password2')
        # 2. 執行註冊操作
        print("%s %s %s" % (username, password, password2))
        return "註冊成功"
    else:
        if request.method == 'POST':
            return '獲得post請求'
    return render_template('html/04-tempWTF.html', form=regist_form)


@app.route('/', methods=['GET', 'POST'])
def get_form():
    if request.method == 'POST':
        username = request.form.get('username')
        password = request.form.get('password')
        refirmpwd = request.form.get('refirmpwd')
        print(username)
        if not all([username, password, refirmpwd]):
            flash('參數不完整')
        elif password != refirmpwd:
            flash('密碼不一致')
        else:
            return 'success'
    return render_template('html/02-form.html')


if __name__ == '__main__':
    app.run(debug=True)

02-form.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>form</title>
</head>
<body>
    <form method="POST">
        <lable>用 戶 名:</lable><input type="text" name="username">

        <lable>密    碼:</lable><input type="password" name="password">

        <lable>確認密碼:</lable><input type="password" name="refirmpwd">

        <input type="submit" value="提交">  

        <hr>
        {#使用遍歷獲取閃現的消息#}
        {% for message in get_flashed_messages() %}
            {{ message }}
        {% endfor %}
    </form>


</body>
</html>

04-tempWTF.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>WTF</title>
</head>
<body>

    <form method="post">
        {{ form.csrf_token() }}
        {{ form.username.label }}{{ form.username }}

        {{ form.password.label }}{{ form.password }}

        {{ form.password2.label }}{{ form.password2 }}

        {{ form.submit }}

    </form>
    <hr>

</body>
</html>

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章