在 Django 中为详细信息视图创建页面访问者计数

A_K*_*A_K 4 python django django-views

我正在尝试为与每个页面查看详细信息相关的每个访问者计数收集数据。

我已经实现了计算页面访问者的功能,但每次刷新它都会添加一个不准确数据的视图。我的问题是如何将 IP 地址添加到函数中以显示它是否确实存在,从计数中忽略它,而访问者计数仅与新访问者有关。

这是models.py

class Post(models.Model):
    user= models.ForeignKey(User, on_delete=models.CASCADE)
    --------------------------------------------------
    title = models.CharField(max_length=100, unique=True)
    viewCount=models.IntegerField(default=0)

    def __str__(self):
        return self.title

    def incrementViewCount(self):
        self.viewCount += 1
        self.save()
Run Code Online (Sandbox Code Playgroud)

这是views.py

    def get(self, request, *args, **kwargs):
        res = super().get(request, *args, **kwargs)
        self.object.incrementViewCount()
        return res
Run Code Online (Sandbox Code Playgroud)

ale*_*nes 5

您可以获取用户 IP 并检查该 IP 是否已计入当天。

在 Django 中获取用户 IP 地址:

def get_client_ip(request):
    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')
    return ip
Run Code Online (Sandbox Code Playgroud)

然后,您必须添加一个日期字段并在 IP 基础上保存访问,即您将有包含 IP、日期列的行 -> 那么这只是计算当天您拥有多少个不同 IP 的问题(天数)或所有时间。

例如

IP              | Date
239.123.191.194   2020-07-27
239.183.192.181   2020-07-27
Run Code Online (Sandbox Code Playgroud)

伪查询 -> Select count(IP) where Date = "2020-07-27"-> 2

或者您可以查看 django-tracking2 或https://github.com/thornomad/django-hitcount -> 这些库可以完成您需要的所有事情以及更多并且很容易实现。