You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 01:15:08