zoukankan      html  css  js  c++  java
  • flask之wtforms 表单验证(一)

    一  安装wtforms

     pip install wtforms

    二  导入相关模块及对象

    from wtforms import Form, widgets, validators
    from wtforms.fields import simple

     三 定义表单类

    # 登陆表单
    class LoginForm(Form):
        name = simple.StringField(
            label=u'用户名',
            validators=[
                validators.DataRequired(message=u'用户名不能为空'),
                validators.Length(min=3, max=8, message=u'用户名长度必须大于%(min)d且小于%(max)d')
            ],
            widget=widgets.TextInput(),
            render_kw={'class': 'form-control'}
        )
        pwd = simple.PasswordField(
            label=u'密码',
            validators=[
                validators.DataRequired(message=u'密码不能为空'),
                validators.Length(min=3, max=8, message=u'密码至少大于3个字符'),
                validators.Regexp(regex="d+",
                                  message=u'密码必须是数字')
            ],
            widget=widgets.PasswordInput(),
            render_kw={'class': 'form-control'}
        )
    
        class Meta:
            csrf = False
    
        def validate_pwd(self, *args, **kwargs):
            pass

     四 在视图函数中将表单对象传给模板进行渲染

    @app.route('/login', methods=['GET', 'POST'])
    def login():
        if request.method == 'GET':
            form = LoginForm()
            return render_template('login.html', form=form)
        else:
            form = LoginForm(request.form)
            if form.validate():
            else:
                print(form.errors)
            return render_template('login.html', form=form)

    五 在模板中展示

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    <form action="" method="post" novalidate>
        <p>{{ form.name.label }} {{ form.name }} {{ form.name.errors.0 }}</p>
        <p>{{ form.pwd.label }} {{ form.pwd }} {{ form.pwd.errors.0 }}</p>
        <input type="submit" value="提交">
    </form>
    </body>
    </html>

    界面展示

  • 相关阅读:
    MyBatisPartA
    概念:漏洞扫描技术
    概念:防火墙技术
    概念:认证技术与访问控制
    概念:为什么要引进密钥管理技术
    概念:数字签名、传统签名和认证
    概念:简述对称密码算法和公钥密码算法的区别
    概念:单向散列函数部分知识点
    Redis单线程QPS效率高的原因,以及redis6.0升级后的变化
    Mydql数据库缓存池Buffer Pool 冷热数据分离
  • 原文地址:https://www.cnblogs.com/lfxiao/p/9184032.html
Copyright © 2011-2022 走看看