FlaskForm自定义验证函数

这是一个用户注册的视图函数:

@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得到验证的方式一样。

发表评论

电子邮件地址不会被公开。