IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    Flask入门学习(十一):定义表单模型类以及flask表单验证

    52txr发表于 2024-07-24 15:05:00
    love 0

    本文介绍了在Flask中使用WTForms和Flask-WTF扩展库进行表单验证的方法。首先,需要安装flask-wtf和wtforms库。然后,通过定义一个基于FlaskForm的RegisterForm类,使用WTForms的字段和验证器来创建表单。在Flask应用中,通过validate_on_submit方法验证表单提交的数据。最后,创建了一个register.html模板文件,用于展示和交互表单数据。

    安装相关库

    表单需要安装flask-wtf、wtforms库,可以使用清华源来加速安装过程。

    pip install flask-wtf wtforms -i https://pypi.tuna.tsinghua.edu.cn/simple

    安装表单相关的库

    代码示例

    首先写flask代码,基于FlaskForm写一个RegisterForm表单类。validate_on_submit是验证提交的内容都没有问题。

    在使用Flask进行表单验证时,我们通常会使用 Flask-WTF 扩展库。在这个过程中,我们使用 WTForms 来定义表单类,并通过 validate_on_submit 方法来判断表单是否通过验证。

    from flask import Flask, render_template, request
    from wtforms import StringField, SubmitField, PasswordField
    from flask_wtf import FlaskForm
    from wtforms.validators import DataRequired,EqualTo
    
    app = Flask(__name__)
    
    # 跨域保护
    app.config['SECRET_KEY'] = '123456'
    
    # 定义表单模型类
    class RegisterForm(FlaskForm):
        username = StringField(label='用户名', validators=[DataRequired(message='用户名不能为空')])
        password = PasswordField(label='密码', validators=[DataRequired(message='密码不能为空')])
        repassword = PasswordField(label='确认密码', validators=[DataRequired(message='确认密码不能为空'), EqualTo('password', message='两次密码不一致')])
        submit = SubmitField(label='提交')
    
    @app.route('/register', methods=['GET', 'POST'])
    def register():
        form123 = RegisterForm()
        if request.method == 'GET':
            return render_template('register.html', form=form123) # 把表单实例传递给模板
        if request.method == 'POST':
            username = form123.username.data
            password = form123.password.data
            if form123.validate_on_submit():
                # validate_on_submit # 验证表单数据是否合法
                return '用户名:%s, 密码:%s' % (username, password)
            else:
                return '提交验证失败'
    
    if __name__ == "__main__":
        app.run()
    

    在模板文件夹中,写一个register.html文件,用于交互flask里的值:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>注册页面</title>
    </head>
    <body>
    
    <form  action=""  method="post">
    {{ form.username.label }}
    {{ form.username }}<br>
    
    {{ form.password.label }}
    {{ form.password }}<br>
    
    {{ form.repassword.label }}
    {{ form.repassword }}<br>
    
    {{ form.submit }}
    </form>
    
    </body>
    </html>


沪ICP备19023445号-2号
友情链接