这是一个用户注册的视图函数:
@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得到验证的方式一样。