这是一个用户注册的视图函数:
@home.route("/register/", methods=["GET", "POST"])
def register () :
form = RegisterForm()
if form.validate_on_submit():
data = form.data
user = User(
name=data["name" ],
email=data["email" ],
phone=data["phone" ],
pwd=generate_password_hash(data["pwd" ]),
uuid=uuid4().hex
)
db.session.add(user)
db.session.commit()
flash("注册成功" , "ok" )
用户注册时 怎么验证用户名或者邮箱已经存在呢?
在FlaskForm中 可以通过自定义验证函数来进行验证
class RegisterForm (FlaskForm) :
name = StringField(
label="账号" ,
validators=[DataRequired("请输入账号" )],
description="账号" ,
render_kw={"class" : "form-control input-lg" , "placeholder" : "请输入账号!" , }
)
pwd = PasswordField(
label="密码" ,
validators=[DataRequired("请输入密码" )],
description="密码" ,
render_kw={"class" : "form-control input-lg" , "placeholder" : "请输入密码!" , }
)
submit = SubmitField(
label="注册" ,
render_kw={"class" : "btn btn-lg btn-success btn-block" }
)
def validate_name (self, field) :
print("自定义验证函数-name" )
name = field.data
print(name)
user = User.query.filter_by(name=name).count()
if user == 1 :
raise ValidationError("昵称已存在" )
看这个自定义的验证函数:
def validate_name (self, field) :
print("自定义验证函数-name" )
name = field.data
print(name)
user = User.query.filter_by(name=name).count()
if user == 1 :
raise ValidationError("昵称已存在" )
其中field.data是数据(field在这里等同于form.name),ValidationError从wtforms导入,用来向用户显示错误信息。当用户输入的用户名已经被注册时,也会在表单字段下面显示我们传进去的错误提示—昵称已存在!。
验证函数的名称由validate_fieldname 组成,fieldname 就是我们在上面定义的一些name,email,phone等。这种形式命名的自定义验证函数就可以得到验证,它们跟DataRequired,Email,Regexp得到验证的方式一样。