Skip to main content
Warning: You are using the test version of PyPI. This is a pre-production deployment of Warehouse. Changes made here affect the production instance of TestPyPI (
Help us improve Python packaging - Donate today!

An asynchronous user activity tracking API for Django.

Project Description

Want to keep track of what your users do even when they don’t hit the server? Set up Djaffar on the server and POST a request to the client API to log user activity to the database, including URL path, user name, browser session, user agent, and IP address.


Add Djaffar to your project (typically in


Specify the URL that will be used to hit Djaffar (typically in

from django.conf.urls import url, include

urlpatterns = [
    url(r'^djaffar/', include('djaffar.urls')),

Make sure the authentication classes you use for your users are specified in the Django Rest Framework settings (typically in


Run the database migration:

$ python migrate djaffar

Client API usage

This will ask Djaffar to write a record with the current date:

var xhr = new XMLHttpRequest();'POST', '/djaffar/track/', true);
xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
xhr.send('date=' + new Date().toISOString());


  • If you use session-based authentication, the cookie is automatically set in the request headers by your browser.

  • But if you use token-based authentication, you’ll need to set the token in the request headers, like so:

    xhr.setRequestHeader('Authorization', 'Bearer F2naN20HpDv4tsJC0b1OhQZVDwRiEy');

Path and URL fragments

If your client app relies on URL fragments for navigation, you’ll need to manually set the path parameter when you hit Djaffar:

xhr.send(... + '&path=' + (window.location.href.split('#')[1] || '/'))

Accessing user activity logs


About sessions

Djaffar uses Django sessions to keep track of browser sessions when logging user activity. Depending on settings, sessions either expire when the user closes their browser or after a given age (see Browser-length sessions vs. persistent sessions).

Whether your app uses session-based user authentication or not, Djaffar uses session (and the associated user agent) for two reasons:

  • Allowing you to distinguish between anonymous visitors
  • Allowing you to distinguish between visits by the same authenticated user through various devices

Release History

This version
History Node


Supported By

Elastic Elastic Search Pingdom Pingdom Monitoring Dyn Dyn DNS Sentry Sentry Error Logging CloudAMQP CloudAMQP RabbitMQ Heroku Heroku PaaS Kabu Creative Kabu Creative UX & Design Fastly Fastly CDN DigiCert DigiCert EV Certificate Google Google Cloud Servers DreamHost DreamHost Log Hosting