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

如何配置django-hitcount实现每次访问都被计入统计

Django hitcount 实现每次访问全量统计方案

hitcount 默认会基于IP、会话、用户信息做访问去重,要实现每次访问都计入统计,可按以下两种方案操作:

方案一:修改全局配置(优先推荐,无需修改业务代码)

在项目的settings.py文件中添加如下配置即可:

# 单位为秒,设置为0表示不做任何时间窗口内的去重,每次访问都算新的访问
HITCOUNT_KEEP_HIT_ACTIVE = 0

配置完成后重启服务即可生效,原有视图、模板标签的逻辑不需要做任何调整。

方案二:自定义计数逻辑(适用于需要自定义统计规则的场景)

如果只想让部分内容的统计跳过去重,或者需要额外的自定义逻辑,可以直接重写Hit记录的创建逻辑,跳过hitcount自带的去重校验:

from django.db.models import F
from hitcount.models import Hit, HitCount
from django.contrib.contenttypes.models import ContentType
from .models import YourContentModel # 替换为你自己的内容模型

def your_content_view(request, pk):
    # 获取要统计的内容实例
    content_obj = YourContentModel.objects.get(pk=pk)
    # 获取对应内容的HitCount关联对象
    content_type = ContentType.objects.get_for_model(content_obj)
    hit_count_obj, _ = HitCount.objects.get_or_create(
        content_type=content_type,
        object_pk=content_obj.pk
    )
    # 直接创建Hit记录,不做任何去重校验
    Hit.objects.create(
        hitcount=hit_count_obj,
        ip=request.META.get('REMOTE_ADDR'),
        session=request.session.session_key,
        user=request.user if request.user.is_authenticated else None
    )
    # 手动更新统计数,用F函数避免并发计数丢失
    hit_count_obj.hits = F('hits') + 1
    hit_count_obj.save(update_fields=['hits'])

    # 后续你的视图业务逻辑
    ...

注意:自定义逻辑里使用F函数更新计数,能避免高并发场景下的计数丢失问题,比直接hits +=1更可靠。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 14:24:02