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
------------

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


* 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.

```python

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


# 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.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

Project details


Download files

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

Source Distribution

File details

Details for the file django-cached_authentication_middleware-0.2.0.tar.gz.

File metadata

File hashes

Hashes for django-cached_authentication_middleware-0.2.0.tar.gz
Algorithm Hash digest
SHA256 3db4140c7cfd9d7ae65039d4682907a17bddb53fcd69a7ff7c2afd0e29c12367
MD5 882c86ab0afac86d4f3a12b691f812e5
BLAKE2b-256 54007b0ca1c3230fb6c91057001ca9b8e9848eaf8d99fefee798e74590b6213e

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page