Skip to main content

A drop in replacement for django's built in AuthenticationMiddleware that utilizes caching.

Project description

django-cached_authentication_middleware is a drop in replacement for
``django.contrib.auth``'s built in ``AuthenticationMiddleware``. It tries to
populate ``request.user`` by fetching user data from cache before falling back
to the database.

Installation
------------

|Build Status|


* Install via pypi::

pip install django-cached_authentication_middleware

* Configure ``CACHES`` in django's ``settings.py``::

CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.memcached.PyLibMCCache',
'LOCATION': '127.0.0.1:11211',
'TIMEOUT': 36000,
}
}

* Replace ``django.contrib.auth.middleware.AuthenticationMiddleware`` with
``cached_auth.Middleware`` in ``settings.py``::

MIDDLEWARE_CLASSES = (
'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
#'django.contrib.auth.middleware.AuthenticationMiddleware'
'cached_auth.Middleware',
)

And you're done!

Cached Auth Preprocessor
------------------------

Sometimes you want to preprocess to ``User`` instance before storing
it into cache. ``cached_auth`` allows you to define
``settings.CACHED_AUTH_PREPROCESSOR``, a callable that takes two arguments, ``user`` & ``request`` and returns a ``User`` instance.

A classic example of this would be to attach ``Profile`` data
to ``User`` object so calling ``request.user.profile`` does not incur a
database hit. Here's how we can implement it.

.. code-block:: python

def attach_profile(user, request):
try:
user.get_profile()
# Handle exception for user with no profile and AnonymousUser
except (Profile.DoesNotExist, AttributeError):
pass
return user


# In settings.py:
CACHED_AUTH_PREPROCESSOR = 'path.to.module.attach_profile'

Running Tests
-------------

To run the test suite::

python tests/runtests.py

To run the test suite with Django custom user (this will run only on Django 1.5)::

python tests/runtests_custom_user.py

Changelog
---------

Version 0.2.2 (2017-04-29)
==================
* Added compatibility with Django 1.11. Thanks @ondrejsika!

Version 0.2.1
=============
* Better Django 1.8 compatibility.

Version 0.2.0
=============

* Added support for Django 1.5's customer user model
* Added ``CACHED_AUTH_PREPROCESSOR`` setting

Version 0.1.1
=============

* Fixed an error where middleware tries to call "get_profile" on AnonymousUser

Version 0.1
===========

* Initial release


.. |Build Status| image:: https://travis-ci.org/ui/django-cached_authentication_middleware.png?branch=master
:target: https://travis-ci.org/ui/django-cached_authentication_middleware

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Files for django-cached_authentication_middleware, version 0.2.2
Filename, size File type Python version Upload date Hashes
Filename, size django_cached_authentication_middleware-0.2.2-py2-none-any.whl (6.6 kB) File type Wheel Python version 2.7 Upload date Hashes View hashes
Filename, size django-cached_authentication_middleware-0.2.2.tar.gz (4.6 kB) File type Source Python version None Upload date Hashes View hashes

Supported by

Elastic Elastic Search Pingdom Pingdom Monitoring Google Google BigQuery Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN SignalFx SignalFx Supporter DigiCert DigiCert EV certificate StatusPage StatusPage Status page