Flask之WTForms验证
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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验证的主要内容,如果未能解决你的问题,请参考以下文章