Flaks-WTF表单的形成和渲染

Flask-WTF是一个集成了WTForms的Flask的扩展 ,可以创建表单类进行验证,也可在HTML中进行渲染表单

创建表单类

每个表单都用一个继承自Form的类表示,每个字段都用一个对象表示,每个对象可以附加多个验证函数。

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

class LoginForm(FlaskForm):
    username = StringField('用户名',validators=[DataRequired(message='用户名不能为空'),Length[1,64],])
    password = PasswordField('密码',validators=[DataRequired(message='密码不能为空')])
    sumbit = SubmitField('登陆')

WTForms支持的表单字段和验证函数

常用的表单字段有:

StringFileld 文本字段

TextAreaField 多行文本

PasswordField 密码文本

SubmitField 表单提交按钮

常用的验证函数:

Email 验证是邮箱地址

EqualTo 比较两个字段的值,一般用于输入两个密码的验证

Length[1,10] 验证长度

Required() 确保字段中有数据

表单渲染

首先在是视图函数中引入一个表单类的实例,然后在返回模版的时候传入实例

@blue.route('/login/',methods=['POST','GET'])
def login():
    form = LoginForm()
    if request.method == 'GET':
        return render_template('login.html',form=form)
    if request.method == 'POST':
        if form.validate_on_submit():
            username = form.username.data
            password = form.password.data
            ....
            return redirect(url_for('user.index'))

Login.html

{{ form.csrf.token }} {{ form.usrname.label }}:{{ form.username }} {{ form.password.label }}:{{ form.password }} {{ form.sumbit() }}
{{ if form.errors }} {{ form.errors }} {{ endif }}
  • 定义字段名:{{ form.字段名.label }}
  • 定义input输入框:{{ form.字段 }}
  • 展示错误信息:{{ form.errors.字段 }}
  • 跨站请求伪造:{{ form.csrf_token }}

验证数据

当我们点击了提交按钮时,form.validate_on_submit()判断会做出两件事情:

  • 通过is_submitted()通过判断HTTP方法来确定是否提交了表单
  • 通过WTForms提供的validate()来验证表单数据 (使用我们在最开始写的表单类中给每个字段传入的验证函数)
自定义验证

可以在表单类创建自定义的验证函数

class LoginResigterForm(FlaskForm)
    ....
    def validate_username(self,field):
        if User.query.filter_by(username=field.data).first():
            raise ValidationError('用户名被注册')

这里用来验证用户名是否已经存在, field.data 是数据

自定义验证函数时,validate_username 时对应的是上面写的username字段,fileld.data也是在页面出输入的username的值

获取数据

验证通过时,我们可以使用form.字段名.data来获得数据

你可能感兴趣的:(Flaks-WTF表单的形成和渲染)