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功能一样!
原文地址:http://blog.51cto.com/daibaiyang119/2046253