from flask_wtf import FlaskForm
from flask_wtf.file import FileRequired, FileAllowed
from wtforms import StringField, PasswordField, SubmitField, FileField
from wtforms.validators import DataRequired, Email, Regexp, EqualTo, ValidationError
from models import User
class LoginForm(FlaskForm):
name = StringField(
label='name',
validators=[
DataRequired("请输入用户名")
],
render_kw={
'placeholder': "请输入用户名"
}
)
pwd = PasswordField(
label="密码",
validators=[
DataRequired("请输入密码!")
],
render_kw={
'placeholder': "请输入密码"
}
)
verify_code=StringField(
label="验证码",
validators=[
DataRequired()
]
)
submit = SubmitField(
label="登录",
render_kw={
"value": "登录"
}
)
class RegisterForm(FlaskForm):
name = StringField(
label='用户名',
validators=[
DataRequired("请输入用户名")
],
render_kw={
'placeholder': "请输入用户名"
}
)
email = StringField(
label="邮箱",
validators=[
DataRequired("请输入邮箱"),
Email("邮箱格式不正确")
]
)
phone = StringField(
label="电话号码",
validators=[
DataRequired("请输入电话"),
Regexp('1\d{10}')
]
)
pwd = PasswordField(
label="密码",
validators=[
DataRequired("请输入密码!")
],
render_kw={
'placeholder': "请输入密码"
}
)
repwd = PasswordField(
label="再次输入密码",
validators=[
DataRequired("请再次输入密码!"),
EqualTo('pwd', message="两次密码不一致")
],
render_kw={
'placeholder': "请再次输入密码"
}
)
submit = SubmitField(
label="注册",
render_kw={
"value": "注册"
}
)
def validate_name(self, field):
name = field.data
user = User.query.filter_by(name=name).count()
if user == 1:
raise ValidationError("昵称已存在")
def validate_email(self, field):
email = field.data
user = User.query.filter_by(email=email).count()
if user == 1:
raise ValidationError("邮箱已存在")
def validate_phone(self, field):
phone = field.data
user = User.query.filter_by(phone=phone).count()
if user == 1:
raise ValidationError("电话号码已存在")
class UploadForm(FlaskForm):
file = FileField(
label="简历",
validators=[
FileRequired(),
FileAllowed(['pdf', 'txt'], '只接受.pdf和.txt格式的简历')
]
)
submit = SubmitField(
render_kw={
"value": "上传",
}
)
字段类型 说 明
StringField 文本字段
TextAreaField 多行文本字段
PasswordField 密码文本字段
HiddenField 隐藏文本字段
DateField 文本字段,值为datetime.date格式
DateTimeField 文本字段,值为datetime.datetime格式
IntegerField 文本字段,值为整数
DecimalField 文本字段,值为decimal.Decimal
FloatFiled 文本字段,值为浮点数
BooleanField 复选框,值为True和False
RadioField 一组单选框
SelectField 下拉列表
SelectMultipleField 下拉列表,可选择多个值
FileField 文件上传字段
SubmitField 表单提交按钮
FormField 把表单作为字段嵌入另一表单
FieldList 一组指定类型的字段
WTForms验证函数:
验证函数 说 明
Email 验证电子邮件地址
EqualTo 比较两个字段的值,常用于要求输入两次密码确认的情况
IPAddress 验证IPv4网络地址
Length 验证输入字符串的长度
NumberRange 验证输入的值在数字范围内
Optional 无输入值时跳过其他验证函数
Required 确保字段中有数据
Regexp 使用正则表达式验证输入值
URL 验证URL
AngOf 确保输入值在可选值列表中
NoneOf 确保输入值之不在可选值列表中