WTForms基本知识
WTForms支持的HTML标准字段
字段对象 描述
StringField 文本字段
TextAreaField 多行文本字段
PasswordField 密码文本字段
HiddenField 隐藏文件字段
DateField 文本字段,值为 datetime.date 文本格式
DateTimeField 文本字段,值为 datetime.datetime 文本格式
IntegerField 文本字段,值为整数
DecimalField 文本字段,值为decimal.Decimal
FloatField 文本字段,值为浮点数
BooleanField 复选框,值为True 和 False
RadioField 一组单选框
SelectField 下拉列表
SelectMutipleField 下拉列表,可选择多个值
FileField 文件上传字段
SubmitField 表单提交按钮
FormField 把表单作为字段嵌入另一个表单
FieldList 一组指定类型的字段
WTForms常用验证函数
验证函数 描述
DataRequired 确保字段中有数据
EqualTo 比较两个字段的值,常用于比较两次密码输入
Length 验证输入的字符串长度
NumberRange 验证输入的值在数字范围内
URL 验证URL AnyOf 验证输入值在可选列表中
NoneOf 验证输入值不在可选列表中
CSRF_ENABLED是为了CSRF(跨站请求伪造)保护。 SECRET_KEY用来生成加密令牌,当CSRF激活的时候,该设置会根据设置的密匙生成加密令牌。
使用 Flask-WTF 需要配置参数 SECRET_KEY
创建表单模型类代码:
# coding:utf-8 from flask import Flask, render_template, url_for, redirect, Response from flask_wtf import FlaskForm # flask_wtf是基于wrforms的,所以下载flask_wtf时就带有了 from wtforms import StringField, PasswordField, SubmitField from wtforms.validators import DataRequired, EqualTo app = Flask(__name__) # 定义表单的模型类 class RegisterFrom(FlaskForm): # 名字 验证器/验证器 数据为空时返回信息 user_name = StringField(label=u"用户名", validators=[DataRequired(u"用户名不能为空!")]) password = PasswordField(label=u"密码", validators=[DataRequired(u"密码不能为空!")]) password2 = PasswordField(label=u'确认密码', validators=[DataRequired(u"确认密码不能为空!"), EqualTo('password', u"两次密码不一致!")]) submit = SubmitField(label=u"提交") # 使用 Flask-WTF 需要配置参数 SECRET_KEY app.secret_key = "reknfknfkefsfsfe" @app.route("/register", methods=["GET", "POST"]) def register(): # 创建form对象,如果是post请求,前端发送数据,flask会把数据在构造form对象时,存放到对象中 form = RegisterFrom() # 如果表单模型类中的数据完全满足所有的验证器(数据不出错),则返回True,否则False if form.validate_on_submit(): username = form.user_name.data pwd = form.password.data pwd2 = form.password2.data print(username, pwd, pwd2) return redirect(url_for("index")) return render_template('register.html', form=form) @app.route("/index") def index(): return "Success" if __name__ == '__main__': app.run() 模板代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <form method="post"> {{ form.csrf_token }} {{ form.user_name.label }} {{ form.user_name }}<br> {% for msg in form.user_name.errors %} <p>{{ msg }}</p> {% endfor %} {{ form.password.label }} {{ form.password }}<br> {% for msg in form.password.errors %} <p>{{ msg }}</p> {% endfor %} {{ form.password2.label }} {{ form.password2 }}<br> {% for msg in form.password2.errors %} <p>{{ msg }}</p> {% endfor %} {{ form.submit }} </form> </body> </html>