python-装饰器实现pv-uv
网站流量统计可以帮助我们分析网站的访问和广告来访等数据,里面包含很多数据的,比如访问试用的系统,浏览器,ip归属地,访问时间,搜索引擎来源,广告效果等。原来是一样的,这次先实现了PV,UV,IP三个重要指标的统计。 PV(访问量):Page View, 即页面浏览量或点击量,用户每次刷新即被计算一次。 UV(独立访客):Unique Visitor,一般使用cookie标记,访问您网站的一台电脑客户端(比如一台电脑开多个浏览器访问则为多个UV)为一个访客,00:00-24:00内相同的客户端只会被计算一次。 IP(独立IP):指独立IP数。00:00-24:00内相同IP地址之被计算一次(多台电脑可能共用一个ip)。 ip、pv、uv的区别: IP(独立IP):某IP地址的计算机访问网站的次数。这种统计方式很容易实现,具有真实性。所以是衡量网站流量的重要指标。 PV(访问量):PV反映的是浏览某网站的页面数,所以每刷新一次也算一次。就是说PV与来访者的数量成正比,但PV并不是页面的来访者数量,而是网站被访问的页面数量。 UV(独立访客):可以理解成访问某网站的电脑的数量。网站判断来访电脑的身份是通过来访电脑的cookies实现的。如果更换了IP后但不清除cookies,再访问相同网站,该网站的统计中UV数是不变的。 工作流程: S1:编写监控javascript和提供接口。这个接口返回的是监控网站对应的javascript文件,这个文件可以再客户端可以标记和采集访客的信息。 S2:网站调用接口。只需将引入javascript到要监控的站点即可,访客访问该站点时,javascript文件就会被加载。 S3:标记和采集数据。监控js被加载后就会往浏览器写入cookie标记访客,比如新访客生产一个新cookie和标记访问次数,若是老用户则,读取 cookie信息,计算访问次数和最后访问时间等,这些客户端的信息处理完后,则向指定的服务器发送数据。 S4:最后服务器接收javascript提交过来的数据处理入库和后续的数据处理了。
1.models层建立统计表
# 每日访问量统计 class Statistics(models.Model): pv = models.IntegerField(default=0) uv = models.IntegerField(default=0) date = models.CharField(max_length=200) class Meta: verbose_name = '网站统计信息' verbose_name_plural = '网站统计信息' def__str__(self): return self.date
2.decorator.py建立装饰器函数
实现每次调用view试图函数前数据库字段先自加1
from models import Statistics import time def pvCount(func): def wrapper(request, *args, **kwargs): dateObj_list = Statistics.objects.filter(date=time.strftime('%Y-%m-%d')) count = dateObj_list.count() if count == 0: # ==0,表示第一次访问,pv,uv默认都为1 Statistics.objects.create(pv=1,uv=1,date=str(time.strftime('%Y-%m-%d'))) else: todayObj = Statistics.objects.get(date=str(time.strftime('%Y-%m-%d')))
# 每访问一次,pv+=1 todayObj.pv += 1 todayObj.save() return func(request, *args, **kwargs) return wrapper
3.view试图导入装饰器函数,并调用
from decorator import pvCount @pvCount def index(request): count = models.NewMachine.objects.all().count() phycount = models.PhysicalHost.objects.all().count() ret = dict() ret['count'] = count ret['phycount'] = phycount return render_to_response('index.html', ret)
本文来自博客园,作者:一石数字欠我15w!!!,转载请注明原文链接:https://www.cnblogs.com/52-qq/p/8919934.html
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 如何使用 Uni-app 实现视频聊天(源码,支持安卓、iOS)
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)