网站流量统计可以帮助我们分析网站的访问和广告来访等数据,里面包含很多数据的,比如访问试用的系统,浏览器,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/52-qq/p/8919934.html

python-装饰器实现pv-uv相关推荐

  1. python对室内设计师有什么用_什么时候会用到python装饰器

    扩展回答 什么时候会用到python装饰器 所谓装饰器就是把函数包装一下,为函数添加一些附加功能,装饰器就是一个函数,参数为被包装的函数,返回包装后的函数:你可以试下:1234567891011121 ...

  2. python简单装饰器_简单介绍Python装饰器(一)

    装饰器的作用 相信大家在 探索过程中已经了解装饰器的作用,也有很多花里胡哨的介绍. 这次小冰也来讲解一下关于Python装饰器的一些小知识. 它的作用: 性能测试 日志 安全验证 ...... 相信大 ...

  3. Python装饰器的神奇功能:自动打印每个方法耗时

    问题: 运行代码时,尤其对于大型项目需要分析每个环节方法耗时的.每个方法前后都写计算耗时及日志打印太繁琐了,而且代码不精简. 解决: Python装饰器类似于Spring的 AOP(Aspect Or ...

  4. python装饰器教学_Python装饰器学习(九步入门)

    这是在Python学习小组上介绍的内容,现学现卖.多练习是好的学习方式. 第一步:最简单的函数,准备附加额外功能 # -*- coding:gbk -*- '''示例1: 最简单的函数,表示调用了两次 ...

  5. 简单介绍python装饰器

    这篇文章简单介绍一下python装饰器,希望对你们有所帮助. 简单正常python例子: def up(text):return text.upper() #转成大写 def lo(text):ret ...

  6. Python装饰器是什么?使用Python装饰器实现计算程序(函数)运行时间的功能

    Python装饰器是什么?使用Python装饰器实现计算程序(函数)运行时间的功能 目录

  7. python 装饰器示例

    python 装饰器示例 import timedef decorator(func): # 传函数def wrapper(*args, **kwargs): # 传参数(也可以传固定参数)start ...

  8. [转]python 装饰器

    以前你有没有这样一段经历:很久之前你写过一个函数,现在你突然有了个想法就是你想看看,以前那个函数在你数据集上的运行时间是多少,这时候你可以修改之前代码为它加上计时的功能,但是这样的话是不是还要大体读读 ...

  9. python装饰器与闭包_Python 装饰器和闭包

    Python 装饰器和闭包 装饰器是 Python 中常见的语法糖,这篇文章讲了闭包和装饰器的原理,并且分析了函数中变量的作用域,以及尝试总结了常见的坑. 装饰器基础 首先来看看装饰器的定义:装饰器本 ...

  10. 利用世界杯,读懂 Python 装饰器

    Python 装饰器是在面试过程高频被问到的问题,装饰器也是一个非常好用的特性, 熟练掌握装饰器会让你的编程思路更加宽广,程序也更加 pythonic. 今天就结合最近的世界杯带大家理解下装饰器. 德 ...

最新文章

  1. elasticsearch多表关联查询_Mybatis【15】 Mybatis如何实现一对一的情况多表关联查询?...
  2. CSS3学习系列之颜色
  3. PE文件数据结构汇总
  4. 删除json中的指定元素_DeleteFile,VBA中借助Windows Scripting Host删除指定文件
  5. Mysql也可以联合多表更新和删除
  6. Linux之hugepage大页内存理论
  7. 2018年网络开发者应该关注什么
  8. PyTorch:数据读取2 - Dataloader
  9. java emoji显示乱码_菜鸟笔记(一) - Java常见的乱码问题
  10. java awt run_JAVA教程 第五讲 AWT图形用户界面设计(一)
  11. zkdemo可以直接调用html,中控指纹机ZKBIOOnline BS开发包 含示例DEMO
  12. 深入学习ElasticSearch(四)——mapping的详细讲解
  13. java毕业设计餐饮类网站Mybatis+系统+数据库+调试部署
  14. 史上最全的app相关的面试题【多测师】
  15. 你写论文时发现了哪些非常神的网站?
  16. 低功耗 WIFI 门铃在微信小程序中的应用实现(Hi3518EV200+Hi1131s+MCU+LiteOS)
  17. CAD怎么降低版本保存
  18. 获取本地音乐文件的专辑,图片,音乐信息
  19. zabbix监控硬件及服务(详解)一
  20. C++_CTime/COleDateTime时间

热门文章

  1. 蒙特卡洛算法及其实现
  2. swap交换空间(当内存不足时)
  3. linux下xampp(apache)中配置域名访问,以及遇到的问题
  4. linux用户管理常用命令
  5. 一位资深Java的阿里系公司实战面试经验,套路还是面试官的多
  6. 为什么我们做分布式要用 Redis ?
  7. TensorFlow Wide And Deep 模型详解与应用
  8. Linux中文件上传rz使用
  9. 多线程:一个线程在运行时发生异常会怎么样?
  10. 【Python】青少年蓝桥杯_每日一题_4.09_输出1~N之间的所有数