有時候咱們常常會跟前端提交的表單數據打交道,每次手寫驗證規則真的很繁瑣。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功能同樣!後端