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
``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
- Download URL: django-cached_authentication_middleware-0.2.0.tar.gz
- Upload date:
- Size: 4.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 3db4140c7cfd9d7ae65039d4682907a17bddb53fcd69a7ff7c2afd0e29c12367 |
|
MD5 | 882c86ab0afac86d4f3a12b691f812e5 |
|
BLAKE2b-256 | 54007b0ca1c3230fb6c91057001ca9b8e9848eaf8d99fefee798e74590b6213e |