django-silent-mammoth-whistle


Namedjango-silent-mammoth-whistle JSON
Version 2.0.0 PyPI version JSON
download
home_pageNone
SummaryA super-simple user analytics tool that tracks user behaviour based on web requests to your Django app.
upload_time2024-10-10 04:40:13
maintainerNone
docs_urlNone
authorNone
requires_python>=3.10
licenseBSD-2-Clause
keywords django analytics user tracking
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            Django Silent Mammoth Whistle
#############################

A super-simple user analytics tool that tracks user behaviour based on web requests to your Django app.

It's intended for use with libraries such as `htmx <https://htmx.org>`_, which generally make a web request for each user interaction. It also includes a JavaScript function for tracking purely client-side actions (e.g. things you might use `Alpine.js <https://alpinejs.dev/>`_ for). The UI is designed for small projects where understanding individual user behaviour is useful.

Features
========

* (optional) Automatic tracking of all web requests - no additional code needed in your project
* JavaScript function for tracking client-side actions
* Separate reporting of authenticated and anonymous sessions
* Shows top platforms, top user-agents (using `user-agents <https://pypi.org/project/user-agents/>`_), top viewport sizes, and new users, for each month
* Tracking cookies can be disabled (you just won't see viewport size data)
* All data is stored in a single table with no relations to your project's tables

Requirements
============

Django 4.2+ and Python 3.8+

Installation
============

1. ``pip install django-silent-mammoth-whistle``

2. Add to ``INSTALLED_APPS`` setting - ideally just above the main app::

		INSTALLED_APPS = [
			...,
			"silent_mammoth_whistle",
			...,
		]

3. Add middleware. At the end is fine::
	
		MIDDLEWARE = [
			...,
			'silent_mammoth_whistle.middleware.SilentMammothWhistleMiddleware',
		]
	
4. Include the silent mammoth whistle URLconf in your project urls.py. The URL (e.g. ``/mammoth``) can be anything you like::
	
		urlpatterns = [
			...,
			path('/mammoth', include('silent_mammoth_whistle.urls')),
			...,
		]
	
5. Add ``<script src="{% static 'silent_mammoth_whistle/js/whistle.js' %}"></script>`` to your templates

6. Run ``migrations ./manage.py migrate silent_mammoth_whistle``

Configuration
=============

All configuration is optional

settings.py
-----------

``WHISTLE_USER_ID_FIELD``

	Defaults to ``'id'``

	The name of a ``User`` model attribute that is used as the unqiue user identifier. It is displayed in the UI and is used for determining which web requests belong to which users.


``WHISTLE_AUTO_LOG``

	Defaults to ``True``

	When True, all web requests are tracked. Disable this feature if you want to record only specific requests.


``WHISTLE_CLIENT_EVENT_PATH``

	Defaults to ``'/whistle'``

	The url used by the ``whistle`` function in ``whistle.js`` to make web requests using JavaScript.


``WHISTLE_COOKIES``

	Defaults to ``True``

	When True, a cookie is added to clients and is used with some JavaScript to record viewport dimensions. I don't think this constitutes a "tracking cookie", but if you think it does, and you don't want that, just set this to ``False``.


Usage
=====

By default, silent mammoth whistle will record all web requests (specifically the HTTP method and the URL for each).

You can also record additional data for a request.

.. code-block:: python

	request.whistle.request('put a string here')

You can record as much data as you like, and you can make as many of these ``request.whistle.request()`` calls as you like. Silent mammoth whistle is super-simple and all data is cast to strings using ``str()`` before saving. Silent mammoth whistle will merge the strings from all the calls into a single string, separated by a tab when rendered.

Practical example time! This line will record the fields present in a POST request. This could be useful if your form has many optional fields and you want to know which ones were included by the user.

.. code-block:: python

	request.whistle.request('fields=' + ", ".join(request.POST.dict().keys()))

When viewing session details in silent mammoth whistle, you'll see 3 columns: time, request, and response. Request is the obvious column to use, but you might like to separate tracking of what the user requested from how the server responded. E.g.

.. code-block:: python

	request.whistle.response('fields in error=' + ", ".join(form.errors.dict().keys()))

These calls all start with ``request.`` because silent mammoth whistle adds a ``whistle`` object to the standard Django ``request`` object.

The JavaScript API is similar

.. code-block:: javascript

	whistle('Edit dialog box open')

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "django-silent-mammoth-whistle",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.10",
    "maintainer_email": null,
    "keywords": "django, analytics, user, tracking",
    "author": null,
    "author_email": "Ben Michie <benopotamus@tinku.net>",
    "download_url": "https://files.pythonhosted.org/packages/16/28/6f06670a38c7e681a0ffcafef9e522e8ddc40b79a2ae822aa7e48db66343/django_silent_mammoth_whistle-2.0.0.tar.gz",
    "platform": null,
    "description": "Django Silent Mammoth Whistle\n#############################\n\nA super-simple user analytics tool that tracks user behaviour based on web requests to your Django app.\n\nIt's intended for use with libraries such as `htmx <https://htmx.org>`_, which generally make a web request for each user interaction. It also includes a JavaScript function for tracking purely client-side actions (e.g. things you might use `Alpine.js <https://alpinejs.dev/>`_ for). The UI is designed for small projects where understanding individual user behaviour is useful.\n\nFeatures\n========\n\n* (optional) Automatic tracking of all web requests - no additional code needed in your project\n* JavaScript function for tracking client-side actions\n* Separate reporting of authenticated and anonymous sessions\n* Shows top platforms, top user-agents (using `user-agents <https://pypi.org/project/user-agents/>`_), top viewport sizes, and new users, for each month\n* Tracking cookies can be disabled (you just won't see viewport size data)\n* All data is stored in a single table with no relations to your project's tables\n\nRequirements\n============\n\nDjango 4.2+ and Python 3.8+\n\nInstallation\n============\n\n1. ``pip install django-silent-mammoth-whistle``\n\n2. Add to ``INSTALLED_APPS`` setting - ideally just above the main app::\n\n\t\tINSTALLED_APPS = [\n\t\t\t...,\n\t\t\t\"silent_mammoth_whistle\",\n\t\t\t...,\n\t\t]\n\n3. Add middleware. At the end is fine::\n\t\n\t\tMIDDLEWARE = [\n\t\t\t...,\n\t\t\t'silent_mammoth_whistle.middleware.SilentMammothWhistleMiddleware',\n\t\t]\n\t\n4. Include the silent mammoth whistle URLconf in your project urls.py. The URL (e.g. ``/mammoth``) can be anything you like::\n\t\n\t\turlpatterns = [\n\t\t\t...,\n\t\t\tpath('/mammoth', include('silent_mammoth_whistle.urls')),\n\t\t\t...,\n\t\t]\n\t\n5. Add ``<script src=\"{% static 'silent_mammoth_whistle/js/whistle.js' %}\"></script>`` to your templates\n\n6. Run ``migrations ./manage.py migrate silent_mammoth_whistle``\n\nConfiguration\n=============\n\nAll configuration is optional\n\nsettings.py\n-----------\n\n``WHISTLE_USER_ID_FIELD``\n\n\tDefaults to ``'id'``\n\n\tThe name of a ``User`` model attribute that is used as the unqiue user identifier. It is displayed in the UI and is used for determining which web requests belong to which users.\n\n\n``WHISTLE_AUTO_LOG``\n\n\tDefaults to ``True``\n\n\tWhen True, all web requests are tracked. Disable this feature if you want to record only specific requests.\n\n\n``WHISTLE_CLIENT_EVENT_PATH``\n\n\tDefaults to ``'/whistle'``\n\n\tThe url used by the ``whistle`` function in ``whistle.js`` to make web requests using JavaScript.\n\n\n``WHISTLE_COOKIES``\n\n\tDefaults to ``True``\n\n\tWhen True, a cookie is added to clients and is used with some JavaScript to record viewport dimensions. I don't think this constitutes a \"tracking cookie\", but if you think it does, and you don't want that, just set this to ``False``.\n\n\nUsage\n=====\n\nBy default, silent mammoth whistle will record all web requests (specifically the HTTP method and the URL for each).\n\nYou can also record additional data for a request.\n\n.. code-block:: python\n\n\trequest.whistle.request('put a string here')\n\nYou can record as much data as you like, and you can make as many of these ``request.whistle.request()`` calls as you like. Silent mammoth whistle is super-simple and all data is cast to strings using ``str()`` before saving. Silent mammoth whistle will merge the strings from all the calls into a single string, separated by a tab when rendered.\n\nPractical example time! This line will record the fields present in a POST request. This could be useful if your form has many optional fields and you want to know which ones were included by the user.\n\n.. code-block:: python\n\n\trequest.whistle.request('fields=' + \", \".join(request.POST.dict().keys()))\n\nWhen viewing session details in silent mammoth whistle, you'll see 3 columns: time, request, and response. Request is the obvious column to use, but you might like to separate tracking of what the user requested from how the server responded. E.g.\n\n.. code-block:: python\n\n\trequest.whistle.response('fields in error=' + \", \".join(form.errors.dict().keys()))\n\nThese calls all start with ``request.`` because silent mammoth whistle adds a ``whistle`` object to the standard Django ``request`` object.\n\nThe JavaScript API is similar\n\n.. code-block:: javascript\n\n\twhistle('Edit dialog box open')\n",
    "bugtrack_url": null,
    "license": "BSD-2-Clause",
    "summary": "A super-simple user analytics tool that tracks user behaviour based on web requests to your Django app.",
    "version": "2.0.0",
    "project_urls": {
        "Bug Tracker": "https://github.com/benopotamus/django-silent-mammoth-whistle/issues",
        "Changelog": "https://github.com/benopotamus/django-silent-mammoth-whistle/blob/main/CHANGELOG.rst",
        "Documentation": "https://github.com/benopotamus/django-silent-mammoth-whistle/blob/main/README.rst",
        "Homepage": "https://github.com/benopotamus/django-silent-mammoth-whistle",
        "Repository": "https://github.com/benopotamus/django-silent-mammoth-whistle"
    },
    "split_keywords": [
        "django",
        " analytics",
        " user",
        " tracking"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "d03d12223ec9ba5488b370e09a6dac7fffd08ab53de09599495d9ddcbd7508b9",
                "md5": "458c381994097bca29b5702723c4b609",
                "sha256": "250f91929761f5a7131f04eab4a6ae4d541a60205a1d69642f7fb730ddcd813d"
            },
            "downloads": -1,
            "filename": "django_silent_mammoth_whistle-2.0.0-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "458c381994097bca29b5702723c4b609",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.10",
            "size": 144265,
            "upload_time": "2024-10-10T04:40:10",
            "upload_time_iso_8601": "2024-10-10T04:40:10.766095Z",
            "url": "https://files.pythonhosted.org/packages/d0/3d/12223ec9ba5488b370e09a6dac7fffd08ab53de09599495d9ddcbd7508b9/django_silent_mammoth_whistle-2.0.0-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "16286f06670a38c7e681a0ffcafef9e522e8ddc40b79a2ae822aa7e48db66343",
                "md5": "c2aadf773d109255556c821c1e1c7520",
                "sha256": "67299c3404f8a3a7244fc52d5c2217611a62005307026ee771bcb29a98fefdf0"
            },
            "downloads": -1,
            "filename": "django_silent_mammoth_whistle-2.0.0.tar.gz",
            "has_sig": false,
            "md5_digest": "c2aadf773d109255556c821c1e1c7520",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.10",
            "size": 139470,
            "upload_time": "2024-10-10T04:40:13",
            "upload_time_iso_8601": "2024-10-10T04:40:13.539764Z",
            "url": "https://files.pythonhosted.org/packages/16/28/6f06670a38c7e681a0ffcafef9e522e8ddc40b79a2ae822aa7e48db66343/django_silent_mammoth_whistle-2.0.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-10-10 04:40:13",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "benopotamus",
    "github_project": "django-silent-mammoth-whistle",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": false,
    "lcname": "django-silent-mammoth-whistle"
}
        
Elapsed time: 0.31120s