初始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-z\d$@$!%*?&]{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>
posted @ 2020-03-21 18:42  alen_zhan  阅读(312)  评论(0编辑  收藏  举报
返回顶部