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

JSON文件读写实现:Flask脚本判断文件存在性及处理逻辑

Flask 脚本:JSON文件检查与动态页面渲染

看起来你已经搭好了基本框架,我来帮你把剩下的逻辑补全,实现完整的功能——先检查目标JSON文件是否存在,存在就直接读取数据渲染页面;不存在就从数据库拉取数据、生成JSON文件,再继续后续流程。

先给你完整的可运行示例代码(注意要放在Flask的视图函数里哦):

from flask import render_template
import json
import os
from your_db_module import db  # 替换成你实际的数据库模块

@app.route('/tests')
def show_tests():
    title = "Tests"
    json_file = "tests.json"
    
    # 检查JSON文件是否存在
    if os.path.exists(json_file):
        # 读取JSON文件内容并转为Python对象
        with open(json_file, 'r', encoding='utf-8') as f:
            data = json.load(f)
        # 渲染模板,把数据传给前端
        return render_template('tests.html', title=title, data=data)
    else:
        # 从数据库查询数据(这里替换成你实际的查询逻辑)
        db_data = db.session.query(YourTestModel).all()  # 替换成你的模型和查询
        
        # 将数据库查询结果转为可序列化的JSON格式
        # 假设你的模型有to_dict()方法来转成字典,或者手动构造
        serialized_data = [item.to_dict() for item in db_data]
        
        # 创建并写入JSON文件
        with open(json_file, 'w', encoding='utf-8') as f:
            json.dump(serialized_data, f, ensure_ascii=False, indent=4)
        
        # 渲染模板,传入刚生成的数据
        return render_template('tests.html', title=title, data=serialized_data)

接下来给你拆解几个关键部分:

  • 文件存在判断:用os.path.exists()检查目标文件路径,确保我们只在需要的时候才去查数据库,提升性能
  • JSON文件读取:存在文件时,用json.load()把JSON内容转成Python字典/列表,这样前端模板可以直接遍历使用
  • 数据库数据处理:查询到数据后,要把ORM模型对象转为JSON可序列化的格式(比如字典列表),这里假设你的模型有to_dict()方法,如果没有,你可以手动构造字典,比如{'id': item.id, 'name': item.name}
  • JSON文件写入:用json.dump()写入文件,加上ensure_ascii=False保证中文等非ASCII字符正常显示,indent=4让文件格式更美观,方便调试

另外给你提两个小建议:

  • 把JSON文件的路径配置成常量或者用Flask的app.root_path来拼接,避免相对路径带来的问题,比如json_file = os.path.join(app.root_path, 'static', 'tests.json')(如果放在static目录下)
  • 如果数据库数据会更新,你可能需要加个缓存失效的逻辑,比如定时检查数据库更新时间,或者提供手动刷新的接口,避免用户看到过期的JSON数据

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:30:24