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.validators常用验证函数
验证函数 说明
DataRequired 确保字段中有数据
EqualTo 比较两个字段的值,常用于比较两次密码输入
Length 验证输入的字符串长度
NumberRange 验证输入的值在数字范围内
URL 验证URL
AnyOf 验证输入值在可选列表中
NoneOf 验证输入值不在可选列表中
配置参数
app.config[“SECRET_KEY”] = “随便写一个字符串”
视图定义表单的模型类
demo.py
from flask import Flask,render_template, session, url_for, redirect
from flask_wtf import FlaskForm
from wtforms import StringField, PassworldField, SubmitField
from wtforms.validators import DataRequired, EqualTo
app = Flask(name)
app.config[‘SECRET_KEY’] = ‘sasfsdfsdfsdfdas’
class RegisterForm(FlaskForm):
username = 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"提交")
@app.route("/register", methods=[“GET”, “POST”])
def register():
form = RegisterForm()
if form.validate_on_submit():
uname = form.user_name.data
pwd = form.password.data
pwd2 = form.password2.data
print(uname, pwd, pwd2)
session["user_name"] = uname
url = url_for("login")
return redirect(url_for('login'))
return render_template("register.html", form=form)
if name == ‘main’:
app.run(debug=True)
register.html
#设置csrf_token
{{ form.csrf_token() }}
{{ form.username.label }}
<p>{{ form.username }}</p>
{{ form.password.label }}
<p>{{ form.password }}</p>
{{ form.password2.label }}
<p>{{ form.password2 }}</p>
<p>{{ form.submit() }}</p>
{% for x in get_flashed_messages() %}
{{ x }}
{% endfor %}