【问题标题】:How to calculate unique IP's in Django (1 unique IP per day)?如何计算 Django 中的唯一 IP(每天 1 个唯一 IP)?
【发布时间】:2019-08-05 07:55:50
【问题描述】:

**

我想计算访问过我网站页面的许多唯一 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 方法的组合,例如:values、distinct、filter 等。但我无法得到我想要的结果。 因为我无法更改字段的格式,所以 distinct 方法不起作用,因为日期每秒都在变化。如果有像 ("%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 规则呢?

感谢您的建议!

【问题讨论】:

    标签: django django-models django-views


    【解决方案1】:

    找到了! 我实际上发现了将原始 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 的情况下做到这一点,请告诉我! :)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-12-02
      • 2011-07-20
      • 1970-01-01
      • 2023-04-02
      • 1970-01-01
      • 2020-10-06
      • 2023-04-06
      相关资源
      最近更新 更多