如何配置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
相关产品推荐
相关产品推荐

