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>
    
  • 相关阅读:
    C# Path 目录
    Maxscript 窗体与结构体this的传递
    python---文件操作
    python---数据类型---集合
    python---购物车---更新
    python---三级菜单
    python---数据类型---字典
    python---数据类型---字符串
    python---购物车
    python---数据类型---列表
  • 原文地址:https://www.cnblogs.com/yafeng666/p/12541232.html
Copyright © 2011-2022 走看看