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

在Django中获取模型前三高频值并写入Dashboard模型

解决Django中统计Top3漏洞VID并填充仪表盘的问题

核心逻辑

由于clientvul模型对client和vid做了唯一约束,每个vid的出现次数等价于关联的不同client数量。我们需要完成三个核心步骤:统计各vid的关联客户端数、按数量取前3个vid的ID、将结果写入dashboard模型。

具体实现代码

1. 统计Top3 VID的查询逻辑

from django.db.models import Count
from .models import clientvul, dashboard

# 统计每个VID关联的客户端数量,按数量降序取前3
top_vids = clientvul.objects.values('vid') \
    .annotate(client_count=Count('client')) \
    .order_by('-client_count')[:3]

# 提取VID的ID,不足3个时用0填充(匹配dashboard字段默认值)
top_vid_ids = [item['vid'] for item in top_vids]
while len(top_vid_ids) < 3:
    top_vid_ids.append(0)

2. 填充Dashboard模型

假设仪表盘只需维护一条全局记录,用get_or_create确保记录存在并更新:

# 获取或创建唯一的仪表盘记录(可根据业务调整匹配条件)
dashboard_record, _ = dashboard.objects.get_or_create(pk=1)

# 更新topvul字段
dashboard_record.topvul1 = top_vid_ids[0]
dashboard_record.topvul2 = top_vid_ids[1]
dashboard_record.topvul3 = top_vid_ids[2]
dashboard_record.save()

3. 配置每日定时任务

以django-crontab为例实现定时执行:

  1. 安装依赖:pip install django-crontab
  2. 在settings.py中添加django_crontab到INSTALLED_APPS
  3. 在app下创建tasks.py编写任务函数:
# tasks.py
from django.db.models import Count
from .models import clientvul, dashboard

def update_dashboard_top_vuls():
    # 统计Top3 VID
    top_vids = clientvul.objects.values('vid') \
        .annotate(client_count=Count('client')) \
        .order_by('-client_count')[:3]
    top_vid_ids = [item['vid'] for item in top_vids]
    while len(top_vid_ids) < 3:
        top_vid_ids.append(0)
    
    # 更新仪表盘
    dashboard_record, _ = dashboard.objects.get_or_create(pk=1)
    dashboard_record.topvul1 = top_vid_ids[0]
    dashboard_record.topvul2 = top_vid_ids[1]
    dashboard_record.topvul3 = top_vid_ids[2]
    dashboard_record.save()
  1. 在settings.py中配置定时规则(每天凌晨2点执行):
CRONJOBS = [
    ('0 2 * * *', '你的应用名.tasks.update_dashboard_top_vuls', '>> /var/log/dashboard_update.log 2>&1')
]
  1. 激活定时任务:
python manage.py crontab add

注意事项

  • 若需仅统计活跃漏洞,在查询中添加.filter(isactive=True)即可。
  • 若仪表盘需要多维度记录(如按部门、按时间),需调整get_or_create的匹配条件,适配业务逻辑。
  • 定时任务日志路径可根据服务器配置修改,方便排查执行异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 03:52:52