python-装饰器实现pv-uv

news/2025/6/19 8:51:56

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默认都为1Statistics.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+=1todayObj.pv
+= 1todayObj.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'] = countret['phycount'] = phycountreturn render_to_response('index.html', ret)

 

 

 

 

转载于:https://www.cnblogs.com/zcok168/p/10090786.html

文章来源:https://blog.csdn.net/weixin_33829657/article/details/93533924
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:https://dhexx.cn/news/show-1065367.html

相关文章

Flink控制任务调度:作业链与处理槽共享组(SlotSharingGroup)

概述为了实现并行执行,Flink应用会将算子划分为不同任务,然后将这些任务分配到集群中的不同进程上去执行。和很多其他分布式系统一样,Flink应用的性能很大程度上取决于任务的调度方式。任务被分配到的工作进程、任务间的共存情况以及工作进程…

gcc 无法编译c17程序解决办法

1.保证将gcc程序升级到7.1以上。 2.如果用命令行手工编译,就多加个参数-stdc17,例如命令应该是: "g" -stdc17 "text.cpp" -o "text.exe" 这样就能编译成功了。 3.如果是集成环境,那就在调用插件那…

手把手用 express 搭建后台

前言 想必很多小伙伴开始学 node 的时候想搞个项目出来却不知道怎么下手吧,这个教程的话就是教大家用 express 框架简单粗暴搭建一个可以用的后台出来,然后关于 node 和 express 的其他知识,大家还是需要自己去看看文档了解一下。 1 环境准备…

八张图,看懂数据分析如何驱动决策

数据驱动决策,是大家天天挂在嘴边的时髦词汇。可到底数据是如何驱动的?很少有同学真正看到过全流程。更有同学总疑惑:“自己被人追着屁股要数,感觉自己才是被驱着动的“。今天系统讲解一下,拒绝跟风。1 最原始的决策流…

基于Impala的高性能数仓实践之执行引擎模块

导读:本系列文章将结合实际开发和使用经验,聊聊可以从哪些方面对数仓查询引擎进行优化。Impala是Cloudera开发和开源的数仓查询引擎,以性能优秀著称。除了Apache Impala开源项目,业界知名的Apache Doris和StarRocks、SelectDB项目…

Reactive Stack系列(一):响应式编程从入门到放弃

为了详细介绍下基于Spring Framework 5 & Spring Boot 2 的WebFlux的响应式编程,先画下如下逻辑图,后文将以逻辑图箭头方向逐一解释关于响应式编程的点点滴滴。1. Spring Framework5自 2013 年12月Spring Framework4.0.0发布以后,时隔接近…

为什么我们需要 Hive Metastore!

IT 中的每个人都与数据打交道,包括前端和后端开发人员、分析师、QA 工程师、产品经理以及许多其他角色的人员。使用的数据和数据处理方法因角色而异,但数据本身往往不是关键。——“这是一把非常特别的钥匙,只适用于 The One”——“它能解锁…

实验报告2

网络对抗技术 实验报告 实验二 网络嗅探与欺骗 学生姓名 刘立坤 年级 2015级 区队 二区 指导教师 高见 信息技术与网络安全学院 2018年11月7日 实验任务总纲 2018—2019 学年 第 一 学期 一、实验目的 1.加深并消化本课程授课内容,复习所学过…

9 个 Java 性能调优技巧,YYDS!

来自:dzone.com/articles/11-simple-java-performance-tuning-tips大多数开发者认为性能优化是一个复杂的话题,它需要大量的工作经验和相关知识理论。好吧,这也不完全错。优化一个应用做到性能最优化可能不是件容易的任务,但是这并…

netty源码解解析(4.0)-1 核心架构

netty是java开源社区的一个优秀的网络框架。使用netty,我们可以迅速地开发出稳定,高性能,安全的,扩展性良好的服务器应用程序。netty封装简化了在服务器开发领域的一些有挑战性的问题:jdk nio的使用;多线程…