zoukankan      html  css  js  c++  java
  • Flask-WTForms 简单使用

    安装 wtforms 2.2.1

    直接上代码:

    app.py 文件:

    from flask import Flask, render_template, request
    from wtforms import Form, validators
    from wtforms.fields import simple, core
    
    
    # form 字段设计
    class RegForm(Form):
        # simple 字段类型
        # StringField 和 TextAreaField 都是字符串的意思,StringField支持的类型少于StringField
        username = simple.StringField(
            label="用户名",
            validators=[  # validators -- 校验信息
                validators.DataRequired(message="用户不能为空"),  # DataRequired -- 当前的地方必须填写数据;  message -- 错误信息
                validators.length(min=4, max=8, message="用户名必须大于等于4小于等于8")  # length -- 长度
            ],
            render_kw={"class": "my_class"}  # 添加 class
        )
    
        password = simple.PasswordField(
            label="密码",
            validators=[
                validators.DataRequired(message="密码不能为空"),
                validators.length(min=6, max=16, message="密码必须大于等于6小于等于16")
            ],
            render_kw={"class": "my_class"}  # 添加 class
        )
    
        repassword = simple.PasswordField(
            label="重复密码",
            validators=[
                validators.DataRequired(message="重复密码不能为空"),
                validators.EqualTo("password", message="两次密码不一致")  # EqualTo("字段名称") 判断该字段是否等于"字段名称"中的值
            ]
        )
    
        gender = core.SelectField(  # 单选字段在核心模块(支持的类型多)中才有
            label="性别",
            choices=(  # 选项
                (1, ""),
                (2, "")
            ),
            default=2,  # 默认值
            coerce=int  # 指定前端提交过来的选项的类型是数字还是字符串 下边有验证
        )
    
        email = simple.StringField(
            label="邮箱",
            validators=[
                validators.Email(message="不符合规定")
            ]
        )
    
        hobby = core.SelectMultipleField(  # 多选字段
            label="爱好",
            choices=(
                ("1", "读书"),
                ("2", "美食"),
                ("3", "电影"),
                ("4", "音乐"),
            ),
            default=("1", "2", "3", "4"),
            coerce=str  # 指定前端提交过来的选项的类型是数字还是字符串 下边有验证
        )
    
    
    app = Flask(__name__)  # 实例化 app
    
    reg_form = RegForm()  # form信息(对象)赋值给reg_form
    
    
    @app.route("/form_reg", methods=["GET", "POST"])
    def reg():
        if request.method == "GET":
            return render_template("form_reg.html", reg_form=reg_form)
        if request.method == "POST":
            reg_form_data = RegForm(request.form)  # 拿到前端传过来的数据(request.form),给RegForm进行校验
            if reg_form_data.validate():  # 如果前段穿过来的数据通过校验
                print(type(reg_form_data.data.get("gender")))   # <class 'int'>
                print(reg_form_data.data.get("hobby"))      # ['1', '2', '3', '4']
                return " * {注册成功} *    愿世界和平,无病无灾"
            else:
                # 前端传过来的内容未通过校验,返回注册页面, 附带注册提交的错误数据和错误提示
                return render_template("form_reg.html", reg_form=reg_form_data)
    
    
    if __name__ == '__main__':
        app.run()

    form_reg.html 文件:

    <!DOCTYPE html>
    <html lang="zh-CN">
    <head>
        <meta http-equiv="content-Type" charset="UTF-8">
        <meta http-equiv="x-ua-compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <title>Title</title>
    
        <style>
            .my_class{
                 500px;
            }
        </style>
    </head>
    <body>
    <h1>注册页面</h1>
    <form action="" method="post" enctype="multipart/form-data" novalidate>
        {% for field in reg_form %}
            <p>{{ field.label }}: {{ field }} <span style="color: red">{{ field.errors.0 }}</span> </p>
        {% endfor %}
    
    {#    {{ reg_form.username.label }}: {{ reg_form.username }}{{ reg_form.username.errors.0 }}<br>#}
    {#    {{ reg_form.password.label }}: {{ reg_form.password }}{{ reg_form.password.errors[0] }}<br>#}
    
        <input type="submit" value="提交">
    </form>
    </body>
    </html>
  • 相关阅读:
    Java JMX 监管
    Spring Boot REST(一)核心接口
    JSR 规范目录
    【平衡树】宠物收养所 HNOI 2004
    【树型DP】叶子的颜色 OUROJ 1698
    【匈牙利匹配】无题II HDU2236
    【贪心】Communication System POJ 1018
    【贪心】Moving Tables POJ 1083
    Calling Extraterrestrial Intelligence Again POJ 1411
    【贪心】Allowance POJ 3040
  • 原文地址:https://www.cnblogs.com/yuanyongqiang/p/10453669.html
Copyright © 2011-2022 走看看