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

Flask应用删除数据后HTML表格不即时更新,需重启终端问题排查

问题描述

开发了一款Flask应用,实现了数据库数据的增删操作,数据展示在HTML表格中。增删功能本身能正常运行,但执行操作后,浏览器里的HTML表格没法即时更新,必须在VSCode里按CTRL+S重启终端后表格才会更新。已经试过清除浏览器缓存、更换localhost,问题还是没解决,需要排查延迟更新的原因。

附上删除功能的代码:

@app.route("/skill_delete/<int:id>")
def skill_delete(id):
    skill_to_delete = Skill.query.get_or_404(id)

    try:
        db.session.delete(skill_to_delete)
        db.session.commit()
        flash("Skill deleted successfully")
        return redirect(url_for('admin_view'))

    except:
        flash("FAILED")
        return redirect(url_for('admin_view'))
可能的原因及解决办法
  • 关闭Flask模板缓存:Flask调试模式默认开启模板缓存,导致页面不会重新渲染最新数据。两种解决方式:
    1. 初始化App时添加配置:app.config['TEMPLATES_AUTO_RELOAD'] = True
    2. 渲染模板时指定缓存超时:render_template('admin_view.html', skills=skills, cache_timeout=0)
  • 检查admin_view的数据查询逻辑:确保admin_view每次请求都重新从数据库拉取数据,别把查询结果存在全局变量或者复用旧的查询对象。比如要把skills = Skill.query.all()写在admin_view函数内部,而不是函数外面。
  • 改用POST请求执行删除:GET请求容易被浏览器缓存,把删除路由改成POST方式:
    @app.route("/skill_delete/<int:id>", methods=['POST'])
    
    前端用表单或者AJAX发送POST请求,避免浏览器缓存旧的GET请求结果。
  • 确保数据库会话同步:在admin_view查询数据前,执行db.session.refresh()同步会话状态,或者直接重新执行查询语句,不要复用之前的查询结果。
  • 添加响应头禁用HTTP缓存:在admin_view返回页面时设置缓存控制头,强制浏览器不缓存页面:
    def admin_view():
        skills = Skill.query.all()
        resp = render_template('admin_view.html', skills=skills)
        resp.headers['Cache-Control'] = 'no-cache, no-store, must-revalidate'
        resp.headers['Pragma'] = 'no-cache'
        resp.headers['Expires'] = '0'
        return resp
    

内容的提问来源于stack exchange,提问作者GrigasK

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 03:05:18