Flask-WTForms的Updateform表单validate_on_submit()不执行如何解决
修复方案
你遇到的validate_on_submit()不触发的问题由以下几个可复现的错误导致,按优先级修复即可:
- 表单缺失文件上传必需的编码属性
你的表单包含文件上传字段FileField,HTML表单默认编码格式无法传输文件数据,会导致后端接收不到完整的表单参数,校验直接失败。
修复方法:修改模板里的form标签,添加enctype属性:<form method="post" enctype="multipart/form-data"> - GET请求下未填充表单初始值,触发必填校验失败
你注释了路由中给邮箱字段赋值的代码,用户打开账户页面时邮箱输入框默认是空的,就算用户不改邮箱,空值提交也会触发DataRequired()校验规则,导致验证不通过。同时原有注释代码的赋值方式错误,需要修改为给字段的data属性赋值:
修复方法:取消路由中对应代码的注释,修正赋值逻辑:elif request.method == "GET": form.email.data = current_user.email - 自定义邮箱验证逻辑错误
表单类中validate_email方法的判断逻辑有误,你直接和模型类User的类属性比对,而不是当前登录用户的邮箱值,会导致验证逻辑不符合预期甚至报错。
修复方法:修改validate_email的判断条件:def validate_email(self, email): if email.data != current_user.email: if User.query.filter_by(email=email.data).first(): raise ValidationError('Email has already been registered')
如果修复后仍有问题,可以在路由中if form.validate_on_submit()代码前添加一行print(form.errors),提交表单后查看控制台输出的错误信息,即可精准定位校验失败的字段和原因。
内容的提问来源于stack exchange,提问作者Konstantinos Vigos
相关产品推荐
相关产品推荐

