Flask中update路由POST请求判断不执行,数据更新功能失效如何解决
问题原因
- 表单提交地址错误:update.html里的
<form>标签action属性设置为/,提交请求直接发往根路由,根本不会触发/update/<id>/路由的处理逻辑,POST请求没有进到update函数内,自然不会触发内部的if判断。 - if条件语法逻辑错误:你写的
if request.method == 'POST' and 'subb' and 'dess' in request.form不符合Python判断逻辑,实际执行的判断规则是「请求方法是POST 且 字符串'subb'非空(恒成立) 且 'dess'在request.form里」,缺少了'subb' in request.form的判断规则。 - 表单字段名和后端取值key不匹配:表单里两个输入框的name属性分别是
subb和dess,但后端用request.form.get('sub')、request.form.get('desc')取值,完全对应不上,就算进入if逻辑也拿不到正确的输入值。 - 更新逻辑错误:现有逻辑是新增一条Crud数据插入数据库,不是修改原有id对应的数据,就算前面的问题都修复也实现不了更新功能。
- HTML语法小问题:form标签里
method = 'POST', action = '/'多了多余的逗号,不符合HTML语法规范。
修复方案
- 第一步修改HTML模板的form标签:删掉多余逗号,把action改成提交到当前update路由即可:
<form method="POST" action=""> <!-- 也可以明确写为 action="/update/{{ searchThisId.id }}/",效果完全一致 -->
- 第二步修改update路由的if判断条件,修正逻辑:
if request.method == 'POST' and 'subb' in request.form and 'dess' in request.form:
- 第三步修正取值key,同时调整更新逻辑,直接修改原有目标数据而不是新增数据:
subj = request.form.get('subb') descr = request.form.get('dess') # 先查询到要更新的原有数据 target_entry = Crud.query.get(id) # 修改对应字段值 target_entry.subject = subj target_entry.description = descr # 直接提交修改即可,不需要add新对象 db.session.commit()
- 补充优化建议:可以增加数据存在性判断,避免传入的id不存在时程序报错,例如
if not target_entry: return 对应提示的逻辑。
内容的提问来源于stack exchange,提问作者APARNA
相关产品推荐
相关产品推荐

