Flask笔记:WTForms

文章目录

      • 使用Flask-WTF处理表单
        • 1. 安装
        • 2. 创建表单类
        • 3. 在模板中渲染表单
          • 3.1 传入表单实例
          • 3.2 在模板中渲染表单
        • 附:常用WTForms字段
        • 常用的 WTForms 验证器

使用Flask-WTF处理表单

WTForms 是一个使用 Python 编写的表单库, 它使得表单的定义、验证(服务器端) 和处理变得非常轻松。Flask-WTF 集成了 WTForms,使用它可以在 Flask 中更方便地使用 WTForms。Flask-WTF 集成了表单数据解析、CSRF保护、文件上传等功能。

1. 安装

	pip install flask-wtf

Flask-WTF使用程序密钥来对CSRF令牌进行签名,所以需要为程序设置密钥:

	app.secret key =’secret string’ 

2. 创建表单类

from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField, SubmitField
from wtforms.validators import DataRequired, Length

class LoginForm(FlaskForm):
    username = StringField('Username', validators=[DataRequired()], render_kw={"placeholder":"hello"})
    password = PasswordField('Password', validators=[DataRequired(), Length(8,128)])
    submit = SubmitField('Login')

每个表单类必须继承自FlaskForm, 其中StringField等为表单中具体的字段,每个字段常用参数如下:

参 数 说 明
label 字段标签<label>的值,也就是渲染后显示在输入字段前的文字
render_kw 一个字典,用来设置对应的 HTML 标签的属性,比如传入{'placeholder' : 'Your Name'},渲染后的 HTML 代码会将 标签的 placeholder 属性设为 Your Name
validators 一个列表,包含一系列验证器,会在表单提交后被逐一调用验证表单数据
default 字符串或可调用对象,用来为表单字段设置默认值

3. 在模板中渲染表单

3.1 传入表单实例
from forms import LoginForm

@app.route('/login', methods=['GET', 'POST'])
def login():
    form = LoginForm()
    # form.validate()用来验证用户输入的数据是否符合之前validators中给出的要求
    # 也可用 form.validate_on_submit()代替下面的条件
    if request.method == 'POST' and form.validate():
        ... # 处理POST请求
    return render_template('login.html', form=form)

除了 POST 方法,如果请求的方法是 PUT、 PATCH 和 DELETE 方法, form.validate_on_ submit()也会验证表单数据。在这里不用带心会相应PUT方法,因为在methods中规定了只响应GET和POST方法。

3.2 在模板中渲染表单
<form method="post"> 
    {{ form.csrf_token }} 

     {{ form.username.label }} 
     {{ form.username(class="form-control") }}  

     {% for message in form.username.errors %} 
     <small class="error">{{ message }} small><br> 
     {% endfor %}

     {{ form.password.label }} 
     {{ form.password(class="form-control", placeholder="hello") }} 

    {{ form.submit(class="btn btn-primary") }} 
form>

附:常用WTForms字段

字段类 说明 对应的HTML表示
BooleanField 复选框,值会被处理为 True 或 False
DateField 文本字段,值会被处理为 datetime.date 对象
DateTimeField 文本字段,值会被处理为 datetime.datetime 对象
FileField 文件上传字段
FloatField 浮点数字段,值会被处理为浮点型
IntegerField 整数字段,值会被处理为整型
RadioField 一组单选按钮
SelectField 下拉列表
SelectMultipleField 多选下拉列表
SubmitField 提交按钮
StringField 文本字段
HiddenField 隐藏文本字段
PasswordField 密码文本字段
TextAreaField 多行文本字段

常用的 WTForms 验证器

验证器 说 明
DataRequired(message=None) 验证数据是否有效
Email(message=None) 验证 Email 地址
EqualTo(fieldname, message=None) 验证两个字段值是否相同
InputRequired(message=None) 验证是否有数据
Length(min=-1 , max=-l, message=None) 验证输入值长度是否在给定范围内
NumberRange(min=None, max=None, message=None) 验证输入数字是否在给定范围内
Optional(strip_whitespace=True) 允许输入值为空 , 并跳过其他验证
Regexp(regex, flags=O, message=None) 使用正则表达式验证输入值
URL(require_tld=True, message=None) 验证 URL
AnyOf(values, message=None, values_formatter=None) 确保输入值在可选值列表中
NoneOf(values, message=None, values_formatter=None) 确保输入值不在可选值列表中

在实例化验证类时, message参数用来传入自定义错误消息,如果没有设直则使用内置的英文错误消息

详见《Flask Web开发实战》

你可能感兴趣的:(Flask)