Django记录站点访问次数
类别: 入门到放弃
标签: Django
日期: 2024-02-23 | 作者:admin | 浏览: 74

想着在站点里统计下不同IP的访问总数,查了下相关资料,Django的可以这么操作。

一、新增访问信息模型


# 站点访问信息
class VisitInfo(models.Model):
    visit_time = models.DateTimeField('访问时间', default=timezone.now)
    ip = models.CharField('访问IP', max_length=20)
    browser = models.CharField('浏览器', max_length=200)

    class Meta:
        verbose_name = '站点访问信息'
        verbose_name_plural = verbose_name
        ordering = ('visit_time',)

    def __str__(self):
        return self.ip

二、访问记录函数


# 记录访问IP
def visit_count(request):
    browser = request.META.get('HTTP_USER_AGENT', 'unknown')
    x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR')
    if x_forwarded_for:
        ip = x_forwarded_for.split(',')[0]
    else:
        ip = request.META.get('REMOTE_ADDR')

    # 2小时内重复IP不统计
    time_interval = timezone.now() - timedelta(hours=2)
    info = VisitInfo.objects.filter(ip=ip).filter(visit_time__gte=time_interval)
    if info:
        pass
    else:
        VisitInfo.objects.create(ip=ip, visit_time=timezone.now(), browser=browser)

三、调用及显示


# 站点首页
def index(request):
    # 调用访问IP记录
    visit_count(request)
    # 总访问数
    count= Visit.objects.count()
    return render(request, 'index.html', {'title': '首页', 'count': count})

 

<