使用flask-wtf扩展库制作表单

  1. 常见字段类型和验证器
字段类型
字段类型说明
StringField普通文本字段
SubmitField提交按钮
PasswordField密码输入框
HiddleField隐藏域
TextAreaField多行文本域
DateField日期字段
DateTimeField日期时间字段
IntegerFIeld整型字段
FloatField浮点型字段
BooleanField布尔类型字段
RadioField单选框
SelectField下拉菜单
FileField文件上传
验证器
验证说明
DateRequired必填项目
Email邮箱地址
IPAddressIP地址
Length内容的长度,可设置最大长度max和最小长度min
NumberRange值的范围,可设置最大值max和最小值min
EqualTo验证两个field是否相同
URL验证URL地址
Regexp正则匹配验证
  1. 表单实例

register.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>用户注册</title>
</head>
<body>
<form action="/register/" method="POST">
{{ formm.csrf_token }}
<p>
    用户名:{{ formm.username(placeholder="请输入用户名") }}
    {% for error in formm.username.errors %}
        <span>{{ error }}</span>
    {% endfor %}
</p>
<p>
    密码:{{ formm.password }}
    {% for error in formm.password.errors %}
        <span>{{ error }}</span>
    {% endfor %}
</p>
<p>
    确认密码:{{ formm.confirm }}
    {% for error in formm.confirm.errors %}
        <span>{{ error }}</span>
    {% endfor %}
</p>
    <input type="submit">
</form>
</body>
</html>

app.py

from flask import Flask, render_template
from flask_script import Manager

from extensions import db
from forms import RegisterForm

app = Flask(__name__)
app.config["SQLALCHEMY_DATABASE_URI"] = "mysql+pymysql://root:123456@127.0.0.1:3306/py"
app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = False
app.config["SECRET_KEY"] = "WER@#$@^@ASD1231ads2131das^%%"
db.init_app(app)
manager = Manager(app)


@app.route("/")
def hello():
    form_i = RegisterForm()
    return render_template("register.html", formm=form_i)


@app.route("/register/", methods=["POST"])
def register():
    form_r = RegisterForm()
    if form_r.validate_on_submit():
        print(form_r.username.data)
        print(form_r.password.data)
        return "验证通过"
    return render_template("register.html", formm=form_r)


if __name__ == '__main__':
    manager.run()

extensions.py

from flask_sqlalchemy import SQLAlchemy

db = SQLAlchemy()

forms.py

from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField
from wtforms.validators import DataRequired, Length, EqualTo, ValidationError


from models import User


class RegisterForm(FlaskForm):
    username = StringField("用户名", validators=[DataRequired("用户名必须输入"), Length(min=3, message="用户名不能少于3位")])
    password = PasswordField("密码", validators=[DataRequired("密码必须输入"), Length(min=6, message="密码至少6位")])
    confirm = PasswordField("确认密码", validators=[DataRequired("密码必须输入"), EqualTo("password", message="两次密码输入不一致")])


    def validate_username(self, field):
        if User.query.filter(User.username == field.data).first():
            raise ValidationError("用户名重复")

models.py

from extensions import db

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True, autoincrement=True, name="uid")
    username = db.Column(db.String(60), unique=True)
    password = db.Column(db.String(120), nullable=False, name="password_hash")

    __tablename__ = "bbs_user"

    def __str__(self):
        return f"{self.username} -- {self.password}"
  1. 结果示例
    在这里插入图片描述
    此时,如果输入不符合规范,点击提交后会显示对应的报错。
    在这里插入图片描述
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值