1. 程式人生 > >Flask之WTForms驗證

Flask之WTForms驗證

flask wtforms

有時候我們經常會跟前端提交的表單數據打交道,每次手寫驗證規則真的很繁瑣。Flask-WTF擴展模塊提供了前端表單自動生成和前端表單提交數據驗證的功能。


WTForms支持的HTML標準字段

字段對象說明
StringField文本字段
TextAreaField多行文本字段
PasswordField密碼文本字段
HiddenField隱藏文本字段
DateField文本字段,值為datetime.date格式
DateTimeField文本字段,值為datetime.datetime格式
IntegerField文本字段,值為整數
DecimalField文本字段,值為decimal.Decimal
FloatField文本字段,值為浮點數
BooleanField復選框,值為True和False
RadioField一組單選框
SelectField下拉列表
SelectMultipleField下拉列表,可選擇多個值
FileField文本上傳字段
SubmitField表單提交按鈕
FormField把表單作為字段嵌入另一個表單
FieldList一組指定類型的字段


WTForms常用驗證函數

驗證函數說明
DataRequired確保字段中有數據
EqualTo比較兩個字段的值,常用於比較兩次密碼輸入
Length驗證輸入的字符串長度
NumberRange驗證輸入的值在數字範圍內
URL驗證URL
AnyOf驗證輸入值在可選列表中
NoneOf驗證輸入值不在可選列表中


register.html

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Register</title>
</head>
<body>
<form method="post">
    <div>用戶名:<input type="text" name="username"></div>
    <div>郵  箱:<input type="text" name="email"></div>
    <div>密  碼:<input type="password" name="password1"></div>
    <div>再次輸入:<input type="password" name="password1"></div>
    <div><input type="submit" value="Submit"></div>
</form>
</body>
</html>


flask.py

# coding=utf-8
from flask import Flask, render_template, request
from wtforms import Form, StringField, PasswordField, validators

app = Flask(__name__)


class UserRegisterForm(Form):
    """用戶註冊表單驗證"""
    username = StringField([validators.Length(min=4, max=10), validators.DataRequired()])
    email = StringField([validators.DataRequired()])
    password1 = PasswordField([validators.DataRequired(), validators.EqualTo("password2")])
    password2 = PasswordField([validators.DataRequired()])


@app.route('/user/register/', methods=["GET", "POST"])
def user_register():
    form = UserRegisterForm(request.form)
    if request.method == "POST" and form.validate():
        print(form.username.data)
        print(form.email.data)
        print(form.password1.data)
        print(form.password2.data)
        return "Thank you for your register!"
    return render_template("register.html")


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

這裏前端的表單是我們自己通過前端標簽手寫的,我在後端定義了UserRegisterForm類,將類實例化把request.form作為參數傳入實例中,validate()方法驗證數據格式是否正確,返回True或False。Flask中的WTForms跟Django中的Form功能一樣!

Flask之WTForms驗證