diff options
| author | Jozef <knaperek@users.noreply.github.com> | 2017-12-08 16:51:16 +0100 |
|---|---|---|
| committer | Tim Graham <timograham@gmail.com> | 2017-12-08 10:51:16 -0500 |
| commit | fff86cfa46d6c5da645f162488216b08eb60db8d (patch) | |
| tree | 1944c8d88b8c0ffac91523bb16442d88f2ea4285 | |
| parent | c5a2f48bed44e024fa9cf9512ad948af9bcbad96 (diff) | |
Made session loading in cached_db engine more DRY.
| -rw-r--r-- | django/contrib/sessions/backends/cached_db.py | 19 | ||||
| -rw-r--r-- | django/contrib/sessions/backends/db.py | 10 |
2 files changed, 9 insertions, 20 deletions
diff --git a/django/contrib/sessions/backends/cached_db.py b/django/contrib/sessions/backends/cached_db.py index dc5eb27c3d..fc78395dfe 100644 --- a/django/contrib/sessions/backends/cached_db.py +++ b/django/contrib/sessions/backends/cached_db.py @@ -2,13 +2,9 @@ Cached, database-backed sessions. """ -import logging - from django.conf import settings from django.contrib.sessions.backends.db import SessionStore as DBStore from django.core.cache import caches -from django.core.exceptions import SuspiciousOperation -from django.utils import timezone KEY_PREFIX = "django.contrib.sessions.cached_db" @@ -36,20 +32,11 @@ class SessionStore(DBStore): data = None if data is None: - # Duplicate DBStore.load, because we need to keep track - # of the expiry date to set it properly in the cache. - try: - s = self.model.objects.get( - session_key=self.session_key, - expire_date__gt=timezone.now() - ) + s = self._get_session_from_db() + if s: data = self.decode(s.session_data) self._cache.set(self.cache_key, data, self.get_expiry_age(expiry=s.expire_date)) - except (self.model.DoesNotExist, SuspiciousOperation) as e: - if isinstance(e, SuspiciousOperation): - logger = logging.getLogger('django.security.%s' % e.__class__.__name__) - logger.warning(str(e)) - self._session_key = None + else: data = {} return data diff --git a/django/contrib/sessions/backends/db.py b/django/contrib/sessions/backends/db.py index 43bfde628c..7c905a2c99 100644 --- a/django/contrib/sessions/backends/db.py +++ b/django/contrib/sessions/backends/db.py @@ -27,19 +27,21 @@ class SessionStore(SessionBase): def model(self): return self.get_model_class() - def load(self): + def _get_session_from_db(self): try: - s = self.model.objects.get( + return self.model.objects.get( session_key=self.session_key, expire_date__gt=timezone.now() ) - return self.decode(s.session_data) except (self.model.DoesNotExist, SuspiciousOperation) as e: if isinstance(e, SuspiciousOperation): logger = logging.getLogger('django.security.%s' % e.__class__.__name__) logger.warning(str(e)) self._session_key = None - return {} + + def load(self): + s = self._get_session_from_db() + return self.decode(s.session_data) if s else {} def exists(self, session_key): return self.model.objects.filter(session_key=session_key).exists() |
