Code

Ticket #6791: cached_db.py

File cached_db.py, 1.4 KB (added by aurelio, 6 years ago)

Modified cached_db.py used to work with django-1.0-final

Line 
1from django.conf import settings
2from django.contrib.sessions.backends.db import SessionStore as DBStore
3from django.core.cache import cache
4 
5class SessionStore(DBStore): 
6    """
7    Implements cached database session store
8    """ 
9    def __init__(self, session_key=None): 
10        super(SessionStore, self).__init__(session_key) 
11 
12    def _get_cache_key(self): 
13        return 'django_session_backend_cache_%s' % (self.session_key) 
14     
15    def load(self):
16        cache_key = self._get_cache_key()
17        data = cache.get(cache_key, None) 
18        if data is None: 
19            data = super(SessionStore, self).load()
20            cache.set(cache_key, data, settings.SESSION_COOKIE_AGE) 
21        return data
22             
23    def exists(self, session_key): 
24        return super(SessionStore, self).exists(session_key)
25             
26    def save(self, must_create=False): 
27        super(SessionStore, self).save(must_create)
28        cache.set(self._get_cache_key(), self._session, settings.SESSION_COOKIE_AGE) 
29     
30    def delete(self, session_key): 
31        super(SessionStore, self).delete(session_key)
32        cache.delete(self._get_cache_key())
33   
34    def flush(self):
35        """
36        Removes the current session data from the database and regenerates the
37        key.
38        """
39        self.clear()
40        self.delete(self.session_key)
41        self.create()