Flask WTForms中validate_on_submit()始终返回False的问题求助
嘿,我看到你在测试Flask WTForms的POST请求时遇到了validate_on_submit()一直返回False的问题,咱们来一步步排查可能的原因:
Submit按钮没写对,表单根本没提交
你的模板最后只写了“Submit”这几个字,这可不是能触发表单提交的按钮啊!浏览器完全不会把这段文本当成提交操作的触发元素,导致表单其实根本没真正提交,validate_on_submit()自然返回False。快把它改成标准的提交按钮:<button type="submit">Submit</button>要是你的
AddSnackForm里已经定义了SubmitField,也可以直接用{{ form.submit }}来渲染按钮,这样更符合WTForms的用法。表单类
AddSnackForm的定义可能有问题
你没贴出AddSnackForm的代码,但这是关键!如果表单类没正确继承FlaskForm,或者字段缺少必要的验证规则(比如DataRequired()),都会导致验证失败。给你一个正确的表单类示例参考:from flask_wtf import FlaskForm from wtforms import StringField, SubmitField from wtforms.validators import DataRequired class AddSnackForm(FlaskForm): snack_name = StringField('Snack Name', validators=[DataRequired()]) submit = SubmitField('Add Snack')一定要确保你的表单类继承自
FlaskForm,每个需要用户填写的字段都配置了对应的验证器哦。检查CSRF令牌是否正常生成
虽然你用了{{ form.hidden_tag() }},但可以打开浏览器开发者工具的Elements面板,查看页面源码里有没有生成名为csrf_token的隐藏输入字段。如果没有,大概率是表单类没继承FlaskForm——只有继承这个类,WTForms才会自动处理CSRF令牌的生成和验证。表单字段不匹配
仔细核对模板中渲染的字段和AddSnackForm里定义的字段是否完全对应。要是模板里渲染了表单类里不存在的字段,或者字段名称拼写错了,也会触发验证失败。
备注:内容来源于stack exchange,提问作者Sean.realitytester

