django-apps django-tracking
Status: Beta
Brought to you by:
techurious
| File | Date | Author | Commit |
|---|---|---|---|
| tracking | 2010-03-24 |
|
[54a211] Bumped to 0.2.9 given the last changes. |
| .hgignore | 2010-03-24 |
|
[bdc6eb] Added MANIFEST file to ignored files. |
| AUTHORS | 2009-01-24 |
|
[5f6f1c] Committing changes that include several code op... |
| CHANGES | 2009-01-24 |
|
[5f6f1c] Committing changes that include several code op... |
| LICENSE | 2009-01-24 |
|
[5f6f1c] Committing changes that include several code op... |
| MANIFEST.in | 2010-03-24 |
|
[388f58] Marked strings for translation and added German... |
| README | 2009-04-23 |
|
[e180f2] issue 6 - updated the README to explain where t... |
| setup.py | 2010-03-24 |
|
[f11ce2] Fixed package data handling for Mac OS X and ot... |
django-tracking is a simple attempt at keeping track of visitors to Django-powered Web sites. It also offers basic blacklisting capabilities.
==Features==
* Tracks the following information about your visitors:
* Session key
* IP address
* User agent
* Whether or not they are a registered user and logged in
* Where they came from (http-referer)
* What page on your site they last visited
* How many pages on your site they have visited
* Allows user-agent filtering for visitor tracking
* Automatic clean-up of old visitor records
* Can ban certain IP addresses, rendering the site useless to visitors from those IP's (great for stopping spam)
* The ability to have a live feed of active users on your website
* Template tags to:
* display how many active users there are on your site
* determine how many active users are on the same page within your site
* Optional "Active Visitors Map" to see where visitors are in the world
==Requirements==
As far as I am aware, the only requirement for django-tracking to work is a modern version of Django. I developed the project on Django 1.0 alpha 2 and beta 1. It is designed to work with the newforms-admin functionality.
If you wish to use a Google Map to display where your visitors are probably at, you must have a Google Maps API key, which is free (http://code.google.com/intl/ro/apis/maps/signup.html). Along with that, you must have the GeoIP C API installed (http://geolite.maxmind.com/download/geoip/api/c/GeoIP.tar.gz) and the GeoIP Python API (http://geolite.maxmind.com/download/geoip/api/python/GeoIP-Python-1.2.4.tar.gz). Finally, you might want to grab the GeoLite City binary unless you are a paying MaxMind customer. Configuring this feature is discussed later.
==Installation==
Download `django-tracking` using *one* of the following methods:
===pip===
You can download the package from the [http://pypi.python.org/pypi/django-tracking/ CheeseShop] or use
{{{
pip install django-tracking
}}}
to download and install `django-tracking`.
===easy_install===
You can download the package from the [http://pypi.python.org/pypi/django-tracking/ CheeseShop] or use
{{{
easy_install django-tracking
}}}
to download and install `django-tracking`.
===Checkout from Subversion===
{{{
svn co http://django-tracking.googlecode.com/svn/trunk/ django-tracking
}}}
===Package Download===
Download the latest `.tar.gz` file from the downloads section and extract it somewhere you'll remember.
The `setup.py` script for this project doesn't seem to install the templates associated with `django-tracking` (at least on my wife's Mac), but I am working to figure out why.
==Configuration==
First of all, you must add this project to your list of `INSTALLED_APPS` in `settings.py`:
{{{
INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
...
'tracking',
...
)
}}}
Run `manage.py syncdb`. This creates a few tables in your database that are necessary for operation.
Depending on how you wish to use this application, you have a few options:
===Visitor Tracking===
Add `tracking.middleware.VisitorTrackingMiddleware` to your `MIDDLEWARE_CLASSES` in `settings.py`. It must be
underneath the `AuthenticationMiddleware`, so that `request.user` exists.
====Automatic Visitor Clean-Up====
If you want to have Django automatically clean past visitor information out your database, put `tracking.middleware.VisitorCleanUpMiddleware`in your `MIDDLEWARE_CLASSES`.
===IP Banning===
Add `tracking.middleware.BannedIPMiddleware` to your `MIDDLEWARE_CLASSES` in `settings.py`. I would recommend making this the very first item in `MIDDLEWARE_CLASSES` so your banned users do not have to drill through any other middleware before Django realizes they don't belong on your site.
===Visitors on Page (template tag)===
Make sure that `django.core.context_processors.request` is somewhere in your `TEMPLATE_CONTEXT_PROCESSORS` tuple. This context processor makes the `request` object accessible to your templates. This application uses the `request` object to determine what page the user is looking at in a template tag.
==Active Visitors Map==
If you're interested in seeing where your visitors are at a given point in time, you might enjoy the active visitor map feature. Be sure you have added a line to your main URLconf, as follows:
{{{
from django.conf.urls.defaults import *
urlpatterns = patterns('',
....
(r'^tracking/', include('tracking.urls')),
....
)
}}}
Next, set a couple of settings in your `settings.py`:
* `GOOGLE_MAPS_KEY`: Your very own Google Maps API key
* `TRACKING_USE_GEOIP`: set this to `True` if you want to see markers on the map
* `GEOIP_DATA_FILE`: set this to the absolute path on the filesystem of your `GeoIP.dat` or `GeoIPCity.dat` or whatever file. It's usually something like `/usr/local/share/GeoIP.dat` or `/usr/share/GeoIP/GeoIP.dat`. You can try leaving this blank if you want; the code will look in the default location if possible.
When that's done, you should be able to go to `/tracking/map/` on your site (replacing `tracking` with whatever prefix you chose to use in your URLconf, obviously). The default template relies upon jQuery for its awesomeness, but you're free to use whatever you would like.
==Usage==
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 %}
<p>
{{ visitors }} active user{{ visitors|pluralize }}
</p>
}}}
If you also want to show how many people are looking at the same page:
{{{
{% visitors_on_page as same_page %}
<p>
{{ same_page }} of {{ visitors }} active user{{ visitors|pluralize }}
{% ifequal same_page 1 %}is{% else %}are{% endifequal %} reading this page
</p>
}}}
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 the `NO_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 Googlebot, 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.
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`.
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`.
Good luck! Please contact me with any questions or concerns you have with the project!