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

如何统计Django中文件下载功能函数的成功调用次数并在站点展示

实现方案

1. 新增下载统计模型

先在你对应App的models.py中添加统计用的表结构,用来存储总下载次数:

from django.db import models

class DownloadStat(models.Model):
    total_download = models.IntegerField(default=0, verbose_name="总下载次数")
    last_update = models.DateTimeField(auto_now=True, verbose_name="最近下载时间")

    class Meta:
        verbose_name = "下载统计"
        verbose_name_plural = verbose_name

添加完成后执行迁移命令生成数据表:

python manage.py makemigrations
python manage.py migrate

你可以进Django后台手动添加一条初始记录,把total_download设为0,后面会自动累加。

2. 修改视图函数添加计数逻辑

在你的下载视图中,表单验证通过、即将返回下载响应的位置添加计数逻辑,这里用Django的F表达式来避免并发请求下计数不准的问题:

from django.db.models import F
from .models import DownloadStat

def Only(request):
    page_title = 'Title'
    # 预先查询当前下载次数,用于模板展示
    stat_obj = DownloadStat.objects.first()
    # 兼容初始无记录的场景,自动创建初始记录
    if not stat_obj:
        stat_obj = DownloadStat.objects.create(total_download=0)
    download_count = stat_obj.total_download

    if request.method == "POST":
        form = Form(request.POST, request.FILES)
        if form.is_valid():
            newdoc = request.FILES['file']
            # 原有业务逻辑保持不变

            # 下载计数+1
            DownloadStat.objects.update(total_download=F('total_download') + 1)
            
            response = HttpResponse(
                output, content_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')
            response['Content-Disposition'] = 'attachment; filename=%s' % filename
            return response
    else:
        form = Form()
    # 把下载次数传给模板
    return render(request, 'only.html', { 
        'form': form, 
        'page_title':page_title,
        'download_count': download_count
    })

3. 模板中展示统计结果

在你需要展示下载次数的模板位置(比如only.html的任意位置),直接渲染传过来的变量即可:

<p>当前文件累计下载次数:{{ download_count }}</p>

如果你后续需要更细粒度的统计,比如区分不同文件、不同用户的下载记录,只需要调整DownloadStat模型,新增文件名、用户ID、请求IP等字段,每次下载新增一条记录,统计时调用count()方法即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 22:06:04