热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

开发笔记:页面浏览统计之tracking

本文由编程笔记#小编为大家整理,主要介绍了页面浏览统计之tracking相关的知识,希望对你有一定的参考价值。转:http://www.codingsoho.com/zh/b
本文由编程笔记#小编为大家整理,主要介绍了页面浏览统计之 tracking相关的知识,希望对你有一定的参考价值。


转:http://www.codingsoho.com/zh/blog/component-tracking/

django-tracking是一个简单的访客记录的应用


前言

本文环境:

Python 2.7.10
Django 1.11

安装

github主页 https://github.com/bashu/django-tracking

django-tracking 0.4.1 版本太老


问题


init里不能import listeners,否则User访问时报错app未导入

查看github上的源代码,并没有这一句,所以去掉应该不会对清理产生影响。这个项目有点乱,github和pypi上有的乱码新旧不一致

File "E:Computervirtualenviblogcsblog racking\__init__.py", line 1, in
import listeners
File "E:Computervirtualenviblogcsblog rackinglisteners.py", line 9, in
from tracking.models import UntrackedUserAgent, BannedIP
File "E:Computervirtualenviblogcsblog rackingmodels.py", line 11, in
from django.contrib.auth.models import User
File "E:Computervirtualenviblogenvlibsite-packagesdjangocontribauthmodels.py", line 4, in
from django.contrib.auth.base_user import AbstractBaseUser, BaseUserManager
File "E:Computervirtualenviblogenvlibsite-packagesdjangocontribauthase_user.py", line 52, in
class AbstractBaseUser(models.Model):
File "E:Computervirtualenviblogenvlibsite-packagesdjangodbmodelsase.py", line 110, in __new__
app_cOnfig= apps.get_containing_app_config(module)
File "E:Computervirtualenviblogenvlibsite-packagesdjangoapps
egistry.py", line 247, in get_containing_app_config
self.check_apps_ready()
File "E:Computervirtualenviblogenvlibsite-packagesdjangoapps
egistry.py", line 125, in check_apps_ready
raise AppRegistryNotReady("Apps aren‘t loaded yet.")
ango.core.exceptions.AppRegistryNotReady: Apps aren‘t loaded yet.

GEOIP支持

from django.contrib.gis. utilsimport HAS_GEOIP

修改为

from django.contrib.gis.geoip import HAS_GEOIP

django新版本位置变了,而且目前是不支持geoip的


MiddlewareMixin

代码直接使用会报错,需要将中间件类的基类改为MiddlewareMixin

Traceback (most recent call last):
File "..envLibsite-packagesdjangoutilsautoreload.py", line 226, in wrapper
fn(*args, **kwargs)
File "..envLibsite-packagesdjangocoremanagementcommands
unserver.py", line 142, in inner_run
handler = self.get_handler(*args, **options)
File "..envLibsite-packagesdjangocontribstaticfilesmanagementcommands
unserver.py", line 27, in get_handler
handler = super(Command, self).get_handler(*args, **options)
File "..envLibsite-packagesdjangocoremanagementcommands
unserver.py", line 64, in get_handler
return get_internal_wsgi_application()
File "..envLibsite-packagesdjangocoreserversasehttp.py", line 46, in get_internal_wsgi_application
return get_wsgi_application()
File "..envLibsite-packagesdjangocorewsgi.py", line 14, in get_wsgi_application
return WSGIHandler()
File "..envLibsite-packagesdjangocorehandlerswsgi.py", line 153, in __init__
self.load_middleware()
File "..envLibsite-packagesdjangocorehandlersase.py", line 82, in load_middleware
mw_instance = middleware(handler)
TypeError: object() takes no parameters

需要在middleware.py里修改

try:
from django.utils.deprecation import MiddlewareMixin
except ImportError:
MiddlewareMixin = object
class VisitorTrackingMiddleware(MiddlewareMixin):

配置

在settings文件里添加APP

INSTALLED_APPS = (
‘django.contrib.admin‘,
‘django.contrib.auth‘,
‘django.contrib.contenttypes‘,
‘django.contrib.sessions‘,
‘django.contrib.sites‘,
...
‘tracking‘,
...
)

运行manage.py migrate同步数据库

添加middleware,他们分别提供下面功能



  • tracking.middleware.VisitorTrackingMiddleware 访客跟踪,必须在AuthenticationMiddleware后面,这样才能访问request.user

  • tracking.middleware.VisitorCleanUpMiddleware 访客自动清理,它将会自动从数据库中清除掉过去的访问者。新版本代码实现里去掉了功能,实际是一个空类,需要研究一下。该应用提供命令来清理历史访客记录。

  • tracking.middleware.BannedIPMiddleware IP黑名单,建议放在最前面,这样那些被禁止的用户也不会在其他的middleware里运行

MIDDLEWARE = [
‘tracking.middleware.BannedIPMiddleware‘,
#
‘django.middleware.security.SecurityMiddleware‘,
‘django.contrib.sessions.middleware.SessionMiddleware‘,
‘django.middleware.common.CommonMiddleware‘,
‘django.middleware.csrf.CsrfViewMiddleware‘,
‘django.contrib.auth.middleware.AuthenticationMiddleware‘,
‘django.contrib.messages.middleware.MessageMiddleware‘,
‘django.middleware.clickjacking.XFrameOptionsMiddleware‘,
#
‘tracking.middleware.VisitorTrackingMiddleware‘,
‘tracking.middleware.VisitorCleanUpMiddleware‘,
]

注意:如果在cms项目中使用的话,记得把它放在cms的middleware前面,否则报错No module named LanguageCOOKIEMiddlewaretracking.middleware

这个跟cms项目安装的要求是一致的,避免URL路由匹配问题。

Traceback (most recent call last):
File "envLibsite-packagesdjangoutilsautoreload.py", line 226, in wrapper
fn(*args, **kwargs)
File "envLibsite-packagesdjangocoremanagementcommands
unserver.py", line 142, in inner_run
handler = self.get_handler(*args, **options)
File "envLibsite-packagesdjangocontribstaticfilesmanagementcommands
unserver.py", line 27, in get_handler
handler = super(Command, self).get_handler(*args, **options)
File "envLibsite-packagesdjangocoremanagementcommands
unserver.py", line 64, in get_handler
return get_internal_wsgi_application()
File "envLibsite-packagesdjangocoreserversasehttp.py", line 46, in get_internal_wsgi_application
return get_wsgi_application()
File "envLibsite-packagesdjangocorewsgi.py", line 14, in get_wsgi_application
return WSGIHandler()
File "envLibsite-packagesdjangocorehandlerswsgi.py", line 153, in __init__
self.load_middleware()
File "envLibsite-packagesdjangocorehandlersase.py", line 80, in load_middleware
middleware = import_string(middleware_path)
File "envLibsite-packagesdjangoutilsmodule_loading.py", line 20, in import_string
module = import_module(module_path)
File "D:Python27libimportlib\__init__.py", line 37, in import_module
__import__(name)
ImportError: No module named LanguageCOOKIEMiddlewaretracking.middleware

正确的顺序如下

MIDDLEWARE = (
‘tracking.middleware.BannedIPMiddleware‘,
‘tracking2.middleware.VisitorTrackingMiddleware‘,
#
‘cms.middleware.utils.ApphookReloadMiddleware‘,
‘django.contrib.sessions.middleware.SessionMiddleware‘,
‘django.middleware.csrf.CsrfViewMiddleware‘,
‘django.contrib.auth.middleware.AuthenticationMiddleware‘,
‘django.contrib.messages.middleware.MessageMiddleware‘,
‘django.middleware.locale.LocaleMiddleware‘,
‘django.middleware.common.CommonMiddleware‘,
‘django.middleware.clickjacking.XFrameOptionsMiddleware‘,
‘django.contrib.sites.middleware.CurrentSiteMiddleware‘,
#
‘tracking.middleware.VisitorTrackingMiddleware‘,
‘tracking.middleware.VisitorCleanUpMiddleware‘,
#
‘cms.middleware.user.CurrentUserMiddleware‘,
‘cms.middleware.page.CurrentPageMiddleware‘,
‘cms.middleware.toolbar.ToolbarMiddleware‘,
‘cms.middleware.language.LanguageCOOKIEMiddleware‘
)

确保‘django.template.context_processors.request‘已经在模板处理器中定义,老的名字是django.core.context_processors.request

这样处理器能够保证request对象可以访问模板,该应用使用request对象来判断当前用户在查看哪个页面。

TEMPLATES = [
{
‘BACKEND‘: ‘django.template.backends.django.DjangoTemplates‘,
‘DIRS‘: [os.path.join(BASE_DIR,‘templates‘)],
‘APP_DIRS‘: True,
‘OPTIONS‘: {
‘context_processors‘: [
‘django.template.context_processors.debug‘,
‘django.template.context_processors.request‘,
‘django.contrib.auth.context_processors.auth‘,
‘django.contrib.messages.context_processors.messages‘,
],
},
},
]

另外,如果你想看看你的访问者都来自哪儿,就需要用到map特性。它使用的是google技术,咱又用不了,就不研究了,有兴趣直接去github看。


使用

要显示当前的模板访问的活跃用户,首先在模板头添加{% load tracking_tags %},然后添加下面代码


To display the number of active users there are in one of your templates, make sure you have {% load tracking_tags %} somewhere in your template and do something like this:


{% visitors_on_site as visitors %}


{{ visitors }} active user{{ visitors|pluralize }}

如果想看看多少人正在看同一页


If you also want to show how many people are looking at the same page:


{% visitors_on_page as same_page %}


{{ same_page }} of {{ visitors }} active user{{ visitors|pluralize }}
{{ same_page|pluralize:"is,are" }} reading this page


If you don‘t want particular areas of your site to be tracked, you may define a list of prefixes in your settings.py using theN O_TRACKING_PREFIXES. For example, if you didn‘t want visits to the/family/ section of your website,set NO_TRACKING_PREFIXES to[‘/family/‘].
If you don‘t want to count certain user-agents, such as Yahoo!‘s Slurp and Google‘s Google bot, you may add keywords to your visitor tracking in your Django administration interface. Look for "Untracked User-Agents" and add a keyword that distinguishes a particular user-agent. Any visitors with the keyword in their user-agent string will not be tracked.


默认,活跃用户统计十分钟内的访问者,你也可以通过修改settings里的TRACKING_TIMEOUT改到你想改的任意值


By default, active users include any visitors within the last 10 minutes. If you would like to override that setting, just set TRACKING_TIMEOUT to however many minutes you want in your settings.py.


每24小时,系统自动清理访问内容,你可以通过覆盖TRACKING_CLEANUP_TIMEOUT这个值来修改


For automatic visitor clean-up, any records older than 24 hours are removed by default. If you would like to override that setting, set TRACKING_CLEANUP_TIMEOUT to however many hours you want in your settings.py.




推荐阅读
  • 安装mysqlclient失败解决办法
    本文介绍了在MAC系统中,使用django使用mysql数据库报错的解决办法。通过源码安装mysqlclient或将mysql_config添加到系统环境变量中,可以解决安装mysqlclient失败的问题。同时,还介绍了查看mysql安装路径和使配置文件生效的方法。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • CEPH LIO iSCSI Gateway及其使用参考文档
    本文介绍了CEPH LIO iSCSI Gateway以及使用该网关的参考文档,包括Ceph Block Device、CEPH ISCSI GATEWAY、USING AN ISCSI GATEWAY等。同时提供了多个参考链接,详细介绍了CEPH LIO iSCSI Gateway的配置和使用方法。 ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • 本文介绍了Perl的测试框架Test::Base,它是一个数据驱动的测试框架,可以自动进行单元测试,省去手工编写测试程序的麻烦。与Test::More完全兼容,使用方法简单。以plural函数为例,展示了Test::Base的使用方法。 ... [详细]
  • 关键词:Golang, Cookie, 跟踪位置, net/http/cookiejar, package main, golang.org/x/net/publicsuffix, io/ioutil, log, net/http, net/http/cookiejar ... [详细]
  • Android系统移植与调试之如何修改Android设备状态条上音量加减键在横竖屏切换的时候的显示于隐藏
    本文介绍了如何修改Android设备状态条上音量加减键在横竖屏切换时的显示与隐藏。通过修改系统文件system_bar.xml实现了该功能,并分享了解决思路和经验。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • 利用Visual Basic开发SAP接口程序初探的方法与原理
    本文介绍了利用Visual Basic开发SAP接口程序的方法与原理,以及SAP R/3系统的特点和二次开发平台ABAP的使用。通过程序接口自动读取SAP R/3的数据表或视图,在外部进行处理和利用水晶报表等工具生成符合中国人习惯的报表样式。具体介绍了RFC调用的原理和模型,并强调本文主要不讨论SAP R/3函数的开发,而是针对使用SAP的公司的非ABAP开发人员提供了初步的接口程序开发指导。 ... [详细]
  • Android源码深入理解JNI技术的概述和应用
    本文介绍了Android源码中的JNI技术,包括概述和应用。JNI是Java Native Interface的缩写,是一种技术,可以实现Java程序调用Native语言写的函数,以及Native程序调用Java层的函数。在Android平台上,JNI充当了连接Java世界和Native世界的桥梁。本文通过分析Android源码中的相关文件和位置,深入探讨了JNI技术在Android开发中的重要性和应用场景。 ... [详细]
  • Android开发实现的计时器功能示例
    本文分享了Android开发实现的计时器功能示例,包括效果图、布局和按钮的使用。通过使用Chronometer控件,可以实现计时器功能。该示例适用于Android平台,供开发者参考。 ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
  • r2dbc配置多数据源
    R2dbc配置多数据源问题根据官网配置r2dbc连接mysql多数据源所遇到的问题pom配置可以参考官网,不过我这样配置会报错我并没有这样配置将以下内容添加到pom.xml文件d ... [详细]
  • Java自带的观察者模式及实现方法详解
    本文介绍了Java自带的观察者模式,包括Observer和Observable对象的定义和使用方法。通过添加观察者和设置内部标志位,当被观察者中的事件发生变化时,通知观察者对象并执行相应的操作。实现观察者模式非常简单,只需继承Observable类和实现Observer接口即可。详情请参考Java官方api文档。 ... [详细]
  • 本文记录了在vue cli 3.x中移除console的一些采坑经验,通过使用uglifyjs-webpack-plugin插件,在vue.config.js中进行相关配置,包括设置minimizer、UglifyJsPlugin和compress等参数,最终成功移除了console。同时,还包括了一些可能出现的报错情况和解决方法。 ... [详细]
author-avatar
陈杰倩平贵奕白
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有