如何计算Django中的唯一IP(每天1个唯一IP)?

时间:2019-08-05 07:55:50

标签: django django-models django-views

**

我想计算出我网站上访问过一个页面的许多唯一IP,每天每个IP的最大访问量= 1。

**

我有一个涉及各个领域的模型。 其中两个是:

- date: created_at.strftime("%d-%m-%y, %H:%M")
- ip: request_ip

这两个信息的示例为:

- 2019-07-15 17:43:09
- 127.0.0.1

我尝试了各种Django方法的组合,例如:值,不同,过滤器等。但是我无法获得想要的结果。 因为我无法更改字段的格式,所以独特的方法将不起作用,因为日期每秒都会更改。设置日期格式为(“%d-%m-%y)=而不包含秒,分钟和小时的数字,那会很好。

这就是下面的示例不起作用的原因。结果,我的数据库中有了所有IP。

示例:

ip_number = reward_views.objects.values('request_ip', 'created_at').distinct().count()

因此,我尝试将信息,IP和日期放入列表中,以便修改日期格式并对其进行更好的处理。

try:
        all_views = reward_views.objects.all().order_by('-updated_at')
    except:
        return HttpResponse(status=500)


    all_dates = []
    for view in all_views:
            all_dates.append({
                'reward_creation_date': view.created_at.strftime("%d-%m-%y"),
                'user_ip': view.request_ip,
            })
    print (all_dates)

但是我找不到合适的方法来计算每天的唯一IP的总数,并最终计算出所有时间的唯一IP的总数(每天每个IP的最大访问次数= 1)。

我应该不用任何方法来计算吗?我是否应该将所有IP都放在一个列表中,而所有日期都放在另一个列表中(它们都以相同的方式排序),然后尝试删除所有相同的事件?但是如何应用24H规则?

感谢您的建议!

1 个答案:

答案 0 :(得分:0)

找到了! 我实际上发现了将原始SQL放入Django的可能性。 所以我添加了这个:

cursor.execute('''
    SELECT COUNT(
        DISTINCT tracker.request_ip, 
        DATE(tracker.updated_at)
    )
    FROM tracker;               
''')
unique_ips = cursor.fetchone()

别忘了导入:

from django.db import connection

效果很好!这是文档的链接:https://docs.djangoproject.com/en/dev/topics/db/sql/#passing-parameters-into-raw

不过,如果有人知道如何在没有任何原始SQL的情况下做到这一点,请告诉我! :)