Get kwargs for Redis() from the settings.
1 from cPickle import loads, dumps
3 from django.contrib.sessions.backends.base import SessionBase, CreateError
4 from django.conf import settings
8 class SessionStore(SessionBase):
10 A redis-based session store.
12 def __init__(self, session_key=None):
13 self.redis = redis.Redis(
14 host=getattr(settings, "REDIS_HOST", None),
15 port=getattr(settings, "REDIS_PORT", None),
16 timeout=getattr(settings, "REDIS_TIMEOUT", None),
17 db=getattr(settings, "REDIS_DB", None))
19 super(SessionStore, self).__init__(session_key)
22 session_data = self.redis.get(self.session_key)
23 if session_data is not None:
24 return loads(session_data)
30 self.session_key = self._get_new_session_key()
32 # Save immediately to ensure we have a unique entry in the
34 self.save(must_create=True)
36 # Key wasn't unique. Try again.
41 def save(self, must_create=False):
43 # preserve=True -> SETNX
44 result = self.redis.set(
45 self.session_key, dumps(self._get_session(no_load=must_create)), preserve=True)
49 self.redis.set(self.session_key, dumps(self._get_session(no_load=must_create)),)
51 def exists(self, session_key):
52 if self.redis.exists(session_key):
56 def delete(self, session_key=None):
57 if session_key is None:
58 if self._session_key is None:
60 session_key = self._session_key
61 self.redis.delete(session_key)