Django的访问计数器
项目描述
欢迎
Django visits是一个用于Django驱动的Web应用的点击计数器应用程序。
您有两种方式使用此应用程序;第一种是计数请求的URL(CounterMiddleware),第二种是计数对象访问(即模型)
配置
您的设置文件应包含以下设置
MIN_TIME_BETWEEN_VISITS: (数字)用户更新计数器所需的最小允许时间间隔
IGNORE_URLS: (列表) 忽略的URL列表,例如静态URL等。注意:仅通过不增加请求的击中计数器来忽略META.PATH_INFO以列表中任何字符串开头的请求。尽管如此,访问仍然会被记录。以下IGNORE_USER_AGENTS和BOTS_USER_AGENTS设置也是同样的情况。
IGNORE_USER_AGENTS: (列表) 用来定义要忽略的用户代理。支持正则表达式。
BOTS_USER_AGENTS: (列表) 用来定义用户是真实用户还是由BotVisitorMiddleware识别的机器人。支持正则表达式。
REQUEST_FIELDS_FOR_HASH: (列表) 用来生成访客的唯一标识符。
URI_WITH_GET_PARAMS: (布尔值) 使用GET参数来识别不同的URI。
VISITS_OBJECTS_AS_COUNTERS: (布尔值) 启用或禁用将访问对象作为计数器的行为(当为False时,每个不同的访问都会在不同的对象中计数)。
默认情况下,BOTS_USER_AGENTS将具有以下值
[ "Teoma", "alexa", "froogle", "Gigabot", "inktomi", "looksmart", "URL_Spider_SQL", "Firefly", "NationalDirectory", "Ask Jeeves", "TECNOSEEK", "InfoSeek", "WebFindBot", "girafabot", "crawler", "www.galaxy.com", "Googlebot", "Googlebot/2.1", "Google", "Webmaster", "Scooter", "James Bond", "Slurp", "msnbot", "appie", "FAST", "WebBug", "Spade", "ZyBorg", "rabaz", "Baiduspider", "Feedfetcher-Google", "TechnoratiSnoop", "Rankivabot", "Mediapartners-Google", "Sogou web spider", "WebAlta Crawler", "MJ12bot", "Yandex/", "YaDirectBot", "StackRambler", "DotBot", "dotbot" ]
用法
将访问添加到INSTALLED_APPS
INSTALLED_APPS = ( # ... "visits", )
如果您想过滤某些类型的用户代理,您可以在settings.py中定义IGNORE_USER_AGENTS
IGNORE_USER_AGENTS = ["Wget/", "curl/"]
如果您想从真实用户中过滤机器人,请在MIDDLEWARE_CLASSES中设置
MIDDLEWARE_CLASSES = ( # ... "visits.middleware.BotVisitorMiddleware", )
如果您想自动按URL计数访问,您应该在MIDDLEWARE_CLASSES中添加CounterMiddleware
MIDDLEWARE_CLASSES = ( # ... "visits.middleware.CounterMiddleware", )
如果您想自动按URL和GET参数计数访问,您应该在settings.py中添加URI_WITH_GET_PARAMS=True
如果您想手动计数URL访问,可以按照以下方式操作
from visits.models import Visits def some_object_view(request, pk): Visit.objects.add_uri_visit(request, request.META["PATH_INFO"], APP_LABEL) #... #...
如果您想按对象计数访问,则与上面的例子类似
from visits.models import Visits def some_object_view(request, pk): some_obj = get_object_or_404(SOME_MODEL, pk=pk) Visit.objects.add_object_visit(request, obj=some_obj) #... #...
在模板内部,您可以使用以下方法获取
使用get_visits获取对象访问次数
使用get_visits模板标签获取URL访问次数
{% load visits_tags %} {% get_visits some_model_instance as visits %} {% get_visits some_request_instance as visits %} {% get_visits some_uri_regex as visits %}
注意:要使用get_visits模板标签获取URI访问次数,您应该在TEMPLATE_CONTEXT_PROCESSORS中添加以下内容
TEMPLATE_CONTEXT_PROCESSORS = ( #... "visits.context_processors.request_meta", )
祝您玩得开心!