我有一个Django模型,如下所示,我用它来跟踪哪些IP地址访问我的网站以及何时访问。
class Visit(models.Model):
created = models.DateTimeField(default=datetime.utcnow)
ip = models.IPAddressField(editable=False)
我想在此模型上编写一个方法,该方法返回特定IP最后100次访问所用的天数。来自IP的单日(小时等)的多次访问都计为单独访问。因此,如果有人在过去2天内访问过该网站100次,则在过去8天内将返回2次,100次,将返回8次,依此类推。
答案 0 :(得分:1)
您可能希望将created_on的default =更改为auto_now_add,因为如果您使用的是dev服务器以外的服务器,则datetime.utcnow不会更新:
class Visit(models.Model):
created = models.DateTimeField(auto_now_add=True,editable=False)
ip = models.IPAddressField(editable=False)
from datetime import datetime
def days_for_100(ip_addr):
now = datetime.now()
dates = Visit.objects.filter(ip=ip_addr)
if dates.count()<100:
latest = dates.latest('-created')
else:
latest = dates.dates('created','day',order='DESC')[99]
return (now-latest).days # timedelta.days
这将返回第100次访问之前发生的天数(或者如果访问次数少于100次,则会在多长时间之前发生第一次访问)
答案 1 :(得分:0)
一种简单的方法是获取ip地址的最后100个Visit对象,并计算其中唯一created
个objets的数量。
def num_of_dates(ip_addr)
dates = [v.created for v in Visit.objects.filter(ip=ip_addr).order_by('-created')[0:100]]
unique_dates = set(dates)
return len(unique_dates)