- 常见字段类型和验证器
字段类型
字段类型 | 说明 |
---|---|
StringField | 普通文本字段 |
SubmitField | 提交按钮 |
PasswordField | 密码输入框 |
HiddleField | 隐藏域 |
TextAreaField | 多行文本域 |
DateField | 日期字段 |
DateTimeField | 日期时间字段 |
IntegerFIeld | 整型字段 |
FloatField | 浮点型字段 |
BooleanField | 布尔类型字段 |
RadioField | 单选框 |
SelectField | 下拉菜单 |
FileField | 文件上传 |
验证器
验证 | 说明 |
---|---|
DateRequired | 必填项目 |
邮箱地址 | |
IPAddress | IP地址 |
Length | 内容的长度,可设置最大长度max和最小长度min |
NumberRange | 值的范围,可设置最大值max和最小值min |
EqualTo | 验证两个field是否相同 |
URL | 验证URL地址 |
Regexp | 正则匹配验证 |
- 表单实例
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}"
- 结果示例
此时,如果输入不符合规范,点击提交后会显示对应的报错。