-
说明:是一个关于表单的扩展库,可以自动生成表单的HTML代码和验证提交的表单数据,并且提供跨站请求伪造(Cross-Site Request Forgery)保护的功能,使用非常方便。
-
安装:
pip install flask-wtf
-
使用:
-
定义表单类
# 设置秘钥 app.config['SECRET_KEY'] = '123456' # 导入表单基类 from flask_wtf import FlaskForm # 导入相关字段 from wtforms import StringField, SubmitField # 导入相关验证器类 from wtforms.validators import DataRequired class NameForm(FlaskForm): name = StringField('用户名', validators=[DataRequired()]) submit = SubmitField('提交')
-
添加视图函数
@app.route('/') def index(): # 创建表单对象 form = NameForm() # 渲染时分配到模板文件 return render_template('form.html', form=form)
-
表单渲染
{# 原生渲染 #} {# 判断是否有错误#} {% if form.name.errors %} {{ form.name.errors[0] }} {% endif %} <h1>Hello {{ name }}</h1> <form action="{{ url_for('wtform') }}" method="post" > # {{form.hidden_tag()}}里面放的也就是csrf_token {{ form.csrf_token }} {{ form.name.label() }}{{ form.name(id='xx',class='yyy') }} {{ form.submit() }} </form> {# bootstrap渲染 #} {% extends 'bootstrap/base.html' %} {% import 'bootstrap/wtf.html' as wtf %} {% block content %} <div class="container">{{ wtf.quick_form(form) }}</div> {% 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个字符'):
flask-wtf表单扩展库的使用
最新推荐文章于 2024-08-29 23:14:22 发布