Flask登录表单error messages不显示,form.errors为空字典问题问询
问题修复方案
核心错误
你在views.py中调用表单校验方法时遗漏了括号,form.validate_on_submit是WTForms提供的校验方法,必须加()完成调用才会触发你在表单类中定义的DataRequired、Email等字段规则校验。未调用时直接判断方法对象的布尔值永远为True,所以无论输入是否合法都会跳过校验直接执行后续逻辑,form.errors自然为空字典。
额外逻辑补全
你当前的逻辑仅处理了账号密码校验通过的场景,缺少「邮箱未注册」「密码错误」两类业务场景的错误提示,需同步补充对应逻辑。
修正后代码
views.py
@users.route("/login", methods=["GET", "POST"]) def login(): form = LoginForm() # 补充括号调用校验方法 if form.validate_on_submit(): user = User.query.filter_by(email=form.email.data).first() # 新增邮箱未注册错误提示 if not user: form.email.errors.append("该邮箱未注册,请先注册账号") # 新增密码错误提示 elif not user.check_password(form.password.data): form.password.errors.append("密码输入错误,请重新输入") # 校验通过才执行登录逻辑 else: login_user(user) return redirect(url_for("core.home", user=user)) # 补充默认值避免session中无total_quantity时报错 return render_template("login.html", form=form, total_quantity=session.get("total_quantity", 0))
修改后即可正常触发邮箱格式校验、空值校验,以及业务层面的账号密码错误提示。
内容的提问来源于stack exchange,提问作者jupo
相关产品推荐
相关产品推荐

