Flask之WTForms驗證

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


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經常使用驗證函數python

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


register.html
web

<!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.pyflask

# 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功能同樣!後端

相關文章
相關標籤/搜索