You need to enable JavaScript to run this app. Django中为ChartJS读取每日更新pandas DataFrame的方案选型及模型实现
优惠活动
大模型
产品
解决方案
定价
更多

Django中为ChartJS读取每日更新pandas DataFrame的方案选型及模型实现

实现路径选择对比

针对你提到的两种方案,基于实际运行逻辑可以直接得出结论:让HTML页面直接读取main.py中DataFrame的路径完全不可行,基于Django模型存储数据是适配场景的正确方案,核心原因如下:

  • 直接读main.py的方案存在硬伤:
    • main.py是运行时脚本,计算生成的DataFrame仅存在于脚本的进程内存中,脚本执行结束后内存资源会被系统回收,浏览器端的HTML页面作为无状态的前端程序,没有权限也没有通信通道直接访问其他Python进程的内存变量
    • 哪怕你临时将DataFrame导出为本地JSON文件供前端读取,多用户同时访问时会出现文件读写冲突,也不支持数据版本留存,完全无法匹配每日更新的长期运行需求
  • Django模型方案的适配性:
    • 数据持久化存储在数据库中,不会随脚本运行结束丢失,可通过标准视图接口安全读取
    • 天然匹配每日更新流程,可留存每日的历史数据快照,后续如果需要扩展多日趋势对比功能,不需要改造存储结构
    • 基于数据库事务的读写机制,不会出现文件类存储的读写冲突,多用户并发访问时的稳定性、性能表现都远好于本地文件方案
匹配你的DataFrame结构的Django模型实现

你的DataFrame中my_data字段是典型的“文本标签-对应整数值”的键值对结构(示例为pass:20、fail:50、n/a:8),结合每日更新的需求,模型设计如下:

# 在你的应用的models.py文件中定义
from django.db import models

class DailyTestMetric(models.Model):
    # 数据所属统计日期,作为每日数据批次的唯一标识
    record_date = models.DateField(verbose_name="统计日期")
    # 指标标签:对应my_data中的pass/fail/n/a这类文本字段
    metric_tag = models.CharField(max_length=50, verbose_name="指标标签")
    # 指标数值:对应标签对应的计数结果
    metric_count = models.IntegerField(verbose_name="指标数值")
    # 数据写入时间戳,方便排查写入异常
    created_at = models.DateTimeField(auto_now_add=True, verbose_name="写入时间")

    class Meta:
        # 设置联合唯一约束:同一天的同一个标签仅存储一条记录,避免重复写入
        unique_together = [["record_date", "metric_tag"]]
        ordering = ["-record_date"]
        verbose_name = "每日测试指标数据"

数据同步流程示例

在main.py中完成数值计算得到目标DataFrame后,可直接按以下逻辑将数据同步到Django模型,完成每日更新:

import pandas as pd
from datetime import date
from your_app.models import DailyTestMetric

# 假设已经完成全部数值计算,得到包含my_data字段的DataFrame
# df = 你的计算逻辑生成的DataFrame
my_data_dict = df["my_data"].to_dict()  # 转换为{'pass':20, 'fail':50, 'n/a':8}结构
today = date.today()

# 批量写入/更新当日数据,遇到重复记录自动覆盖
for tag, count in my_data_dict.items():
    DailyTestMetric.objects.update_or_create(
        record_date=today,
        metric_tag=tag,
        defaults={"metric_count": count}
    )
ChartJS前端渲染的配套流程
  • 编写Django视图,查询模型中最新一天的指标数据,组装为ChartJS需要的结构化参数(x轴标签列表、对应数值列表)传递给前端模板
  • 前端模板中引入ChartJS资源后,直接将视图传递的参数绑定到图表配置中即可完成渲染
  • 每日同步无需改动前端逻辑,只需要将main.py中“计算-写入模型”的流程,通过系统定时任务(比如Linux cron、Windows任务计划)固定时间运行,用户刷新页面时即可自动获取最新的图表数据

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.05 06:45:05