Flask之WTForms验证
程序员文章站
2023-12-21 18:51:40
...
有时候我们经常会跟前端提交的表单数据打交道,每次手写验证规则真的很繁琐。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功能一样!
转载于:https://blog.51cto.com/daibaiyang119/2046253