zoukankan      html  css  js  c++  java
  • 初始wtforms表单,以及简单使用

    flask插件之web框架的form组件wtforms

    """
    要用表单验证,就要安装插件
    WTForms是一个支持多个web框架的form组件,主要用于对用户请求数据进行验证。
        pip install wtforms
    """
    

    表单验证的初体验

    from flask import Flask, render_template, request, redirect
    from wtforms import Form # 导入Form
    from wtforms.fields import simple  # 字段的类型
    from wtforms import validators # 检验
    from wtforms import widgets # 插件
    
    app = Flask(__name__, template_folder='templates')
    app.debug = True
    
    
    # 自定义表单,继承Form
    class LoginForm(Form):
        # 字段(内部包含正则表达式)
        name = simple.StringField(
            label='用户名',
            validators=[
                validators.DataRequired(message='用户名不能为空.'),
                validators.Length(min=6, max=18, message='用户名长度必须大于%(min)d且小于%(max)d')
            ],
            widget=widgets.TextInput(),  # 页面上显示的插件
            render_kw={'class': 'outter'}
    
        )
        # 字段(内部包含正则表达式)
        pwd = simple.PasswordField(
            label='密码',
            validators=[
                validators.DataRequired(message='密码不能为空.'),
                validators.Length(min=8, message='用户名长度必须大于%(min)d'),
                # validators.Regexp(regex="^(?=.*[a-z])(?=.*[A-Z])(?=.*d)(?=.*[$@$!%*?&])[A-Za-zd$@$!%*?&]{8,}",
                #                   message='密码至少8个字符,至少1个大写字母,1个小写字母,1个数字和1个特殊字符')
    
            ],
            widget=widgets.PasswordInput(),
            render_kw={'class': 'password'}
        )
    
    
    @app.route('/login', methods=['GET', 'POST'])
    def login():
        if request.method == 'GET':
            form = LoginForm()  # 得到一个form对象
            return render_template('login.html', form=form) # 把form对象传到前端
        else:
            form = LoginForm(formdata=request.form)
            if form.validate(): # 校验
                print('用户提交数据通过格式验证,提交的值为:', form.data)
            else:
                print(form.errors)
            return render_template('login.html', form=form)
    
    
    if __name__ == '__main__':
        app.run()
    

    label

    """
    label标签不会向用户呈现任何特殊效果,它的作用是为鼠标用户改进了可用性。
    如果你在 label标签内点击文本,就会触发此控件。
    就是说,当用户单击选中该label标签时,浏览器就会自动将焦点转到和标签相关的表单控件上
    (就自动选中和该label标签相关连的表单控件上)
    注意:标签的 for 属性中的值应当与相关控件的 id 属性值一定要相同。
    """
    

    login.html

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    <h1>登录</h1>
    <form method="post">
        <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>
    
  • 相关阅读:
    HDU4529 郑厂长系列故事——N骑士问题 —— 状压DP
    POJ1185 炮兵阵地 —— 状压DP
    BZOJ1415 聪聪和可可 —— 期望 记忆化搜索
    TopCoder SRM420 Div1 RedIsGood —— 期望
    LightOJ
    LightOJ
    后缀数组小结
    URAL
    POJ3581 Sequence —— 后缀数组
    hdu 5269 ZYB loves Xor I
  • 原文地址:https://www.cnblogs.com/yafeng666/p/12541232.html
Copyright © 2011-2022 走看看