Caches the groups a user is in so requests don't have to make calls to the database to check group status.
Project description
Caches the groups a user is in so requests don’t have to make calls to the database to check group status.
Support
Currently supporting Django 1.8, 1.11, and 2.0 with Python 2.7/Python 3 where support for versions aligns with Django’s support. See the tox.ini file for specific Python and Django version pairings.
Documentation
The full documentation is at https://django-groups-cache.readthedocs.io.
Quickstart
Install django-groups-cache:
pip install django-groups-cache
Add it to your INSTALLED_APPS:
INSTALLED_APPS = (
...
'groups_cache.apps.GroupsCacheConfig',
...
)
Add the middleware to your MIDDLEWARE_CLASSES:
MIDDLEWARE_CLASSES = (
'django.contrib.sessions.middleware.SessionMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
...
'groups_cache.middleware.GroupsCacheMiddleware',
)
Checking in a Django Template if the user is in a group name:
{% if "admins" in request.groups_cache %}
<a href="/admin">Admin Panel</a>
{% endif %}
# or use templatetag, note that templatetag is slower
{% load has_group %}
{% if request.user|has_group:"admins" %}
<a href="/admin">Admin Panel</a>
{% endif %}
Turn on caching:
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
'LOCATION': '127.0.0.1:11211',
}
}
See https://docs.djangoproject.com/en/1.10/topics/cache/#memcached for more details on setting up memcached.
Note**
Using django.core.cache.backends.locmem.LocMemCache is not safe for production unless you are only running a single process (and odds are you aren’t).
See https://docs.djangoproject.com/en/1.10/topics/cache/#local-memory-caching for more details.
Features
Adds groups_cache property to request object
Provides templatetag has_group
Invalidates cache on User or Group model changes and on m2m groups ManyToManyField changes
Fully tested with high coverage
Running Tests
source <YOURVIRTUALENV>/bin/activate (myenv) $ pip install tox (myenv) $ tox
Credits
Tools used in rendering this package:
History
0.5.5 (2017-01-13)
Bug fix for templatetag has_group
Tests added for 100% coverage of templatetag folder
0.5.5 (2017-01-12)
Omit urls.py from coverage report (not used but needed for django package)
Omit apps.py from coverage report (default apps file)
0.5.4 (2017-01-12)
Removal of py32/django1.8 support from Travis CI build
0.5.3 (2017-01-12)
Fixing .travis.yml file and CI builds
0.5.2 (2017-01-12)
Typo in README.rst
0.5.1 (2017-01-12)
Add codecov.io support
Documentation updates
0.5.0 (2017-01-12)
Add requirements.txt to tox.ini so tests can run
Fix broken compatibility with Django 1.8/1.9 due to backwards incompatible changes in 1.9/1.10 code
0.4.0 (2017-01-12)
Add test suite that generates 100% coverage
Fixed a bug found by test suite with cache not invalidating on the groups ManyToManyField changing
0.3.1 (2017-01-11)
Documentation updates
0.3.0 (2017-01-11)
First stable and working release on PyPI.
0.1.0 (2017-01-11)
First release on PyPI.