是一个关于表单的扩展库,可以自动生成表单的HTML代码和验证提交的表单数据,并且提供跨站请求伪造(Cross-Site Request Forgery)保护的功能,使用非常方便
1.创建表单类,实例化对象
2.在模板中使用该对象
3.在试图函数中处理表单
从 flask_wtf 进口 FlaskForm
从 wtforms 导入 StringField
从 wtforms.validators 导入 DataRequired
class MyForm (FlaskForm ):
name = StringField ('name' , validators = [ DataRequired ()])
@app.route('/')
def index():
# 创建表单对象
form = NameForm()
# 渲染时分配到模板文件
return render_template('form.html', form=form)
{# 原生渲染 #}
{# 判断是否有错误#}
{% if form.name.errors %}
{{ form.name.errors[0] }}
{% endif %}
{# bootstrap渲染 #}
{% extends 'bootstrap/base.html' %}
{% import 'bootstrap/wtf.html' as wtf %}
{% block content %}
{% endblock %}
@app.route('/', methods=['GET', 'POST'])
def index():
# 创建表单对象
form = NameForm()
name = None
# 表单校验
if form.validate_on_submit():
# 通过校验,则取出数据
name = form.name.data
form.name.data = ''
# 渲染时分配到模板文件
return render_template('form.html', form=form, name=name)
POST重定向GET解决重复提交的问题
@app.route('/wtform/', methods=['GET','POST'])
def wtform():
form = MyForm()
# 判断form表单中的数据是否通过校验
if form.validate_on_submit():
# 通过校验,则取出数据。
name = form.name.data
last_name = session.get('name') or None
# 判断这次提交的name是否和上次的相等
if last_name and last_name == name:
return '老铁别重复提交了'
else:
# 不是重复提交,设置session
session['name'] = name
return render_template('wtform.html',form=form, name=name)
return render_template('wtform.html', form=form)
字段类型 说明
StringField 普通文本字段
PasswordField 密码文本字段
SubmitField 提交按钮
HiddenField 隐藏文本字段
TextAreaField 多行文本字段
DateField 文本字段,datetime.date格式
DateTimeField 文本字段,datetime.datetime格式
IntegerField 文本字段,整数类型
FloatField 文本字段,小数类型
BooleanField 复选框,值为True或False
RadioField 单选框
SelectField 下拉列表
FileField 文件上传字段
验证器 说明
DataRequired 确保字段有值(并且if判断为真)
Email 邮箱地址
IPAddress IPv4的IP地址
Length 规定字符长度
NumberRange 输入数值的范围
EqualTo 验证两个字段的一致性
URL 有效的URL
Regexp 正则验证
自定义字段验证:就是写一个'validate_字段'的函数,如下:
class NameForm(FlaskForm):
name = StringField('用户名', validators=[DataRequired()])
submit = SubmitField('提交')
# 自定义字段验证
def validate_name(self, field):
if len(field.data) < 6:
raise ValidationError('用户名长度不能少于6个字符')
手机扫一扫
移动阅读更方便
你可能感兴趣的文章