安装flask-wtf第三方库:用于表单验证
pip install flask-wtf
from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField
from wtforms.validators import DataRequired,Length,EqualTo,Email,ValidationError
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):
# field.data是要验证的值
# print(field,field.data)
if User.query.filter(User.username==field.data).first():
raise ValidationError("用户名重复")
常见字段类型
字段类型 | 字段说明 |
---|---|
StringField | 普通⽂本字段 |
SubmitField | 提交按钮 |
PasswordField | 密码输⼊框 |
HiddleField | 隐藏域 |
TextAreaField | 多⾏⽂本域 |
DateField | ⽇期字段 |
DateTimeField | ⽇期时间字段 |
IntegerFIeld | 整形字段 |
FloatField | 浮点字段 |
BooleanField bool | 类型字段 |
RadioField | 单选 |
SelectField | 下拉 |
FileField | ⽂件上传 |
常见验证器
验证 | 说明 |
---|---|
DateRequired | 必填 |
邮箱地址 | |
IPAddress | IP地址 |
Length | 内容的⻓度 有max 和min |
NumberRange | 值的范围 min和max |
EqualTo | 验证俩个字段是否相同 |
URL | 验证URL地址 |
Regexp | 正则匹配 |
eg:
class Register(FlaskForm):
#username为当前标签的name值 ⽤户名为到那个前标签展示的左侧的label标签
点击⽤户名 出发当前标签选中节点
username = StringField('⽤户名',validators=[DataRequired('请输⼊⽤
户名'),Length(min=6,max=12,message='⽤户名⻓度范围在6~12位之间')])
userpass = PasswordField('密码',validators=[DataRequired('请输⼊密
码'),Length(min=6,max=12,message='密码⻓度范围在6~12位之间')])
confirm = PasswordField('确认密码',validators=[DataRequired('请输
⼊确认密码'),EqualTo('userpass',message='密码和确认密码不⼀致')])
email = StringField('邮箱',validators=[DataRequired('请输⼊邮箱地
址'),Email(message='请输⼊正确的邮箱')]) submit = SubmitField('注册') #注册
@app.route('/register/',methods=['GET','POST'])
def register():
form = Register() #实例化表单类
#这个⽅法是实现表单校验功能的 csrf,数据正确性 都通过了 则为真 否则为假
if form.validate_on_submit():
# print(request.form)
print(form.username) #拿到username的整个标签
print(form.username.data) #取出username⾥⾯的value值
return '数据提交过来了'
return render_template('register.html',form=form