From 13a7f1e7351a33949ec2f87014f338e1c28753d1 Mon Sep 17 00:00:00 2001 From: blag Date: Sun, 15 Oct 2023 13:51:39 -0700 Subject: [PATCH] Simplify session model according to Django docs --- .../0004_alter_session_expire_date.py | 18 +++++++++ user_sessions/models.py | 37 +++++-------------- 2 files changed, 28 insertions(+), 27 deletions(-) create mode 100644 user_sessions/migrations/0004_alter_session_expire_date.py diff --git a/user_sessions/migrations/0004_alter_session_expire_date.py b/user_sessions/migrations/0004_alter_session_expire_date.py new file mode 100644 index 0000000..3d74b16 --- /dev/null +++ b/user_sessions/migrations/0004_alter_session_expire_date.py @@ -0,0 +1,18 @@ +# Generated by Django 4.2.5 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('user_sessions', '0003_auto_20161205_1516'), + ] + + operations = [ + migrations.AlterField( + model_name='session', + name='expire_date', + field=models.DateTimeField(db_index=True, verbose_name='expire date'), + ), + ] diff --git a/user_sessions/models.py b/user_sessions/models.py index 9d98628..3579e2d 100644 --- a/user_sessions/models.py +++ b/user_sessions/models.py @@ -1,29 +1,18 @@ from django.conf import settings +from django.contrib.sessions.base_session import ( + AbstractBaseSession, BaseSessionManager, +) from django.db import models -from django.utils.translation import gettext_lazy as _ from .backends.db import SessionStore -class SessionManager(models.Manager): +class SessionManager(BaseSessionManager): use_in_migrations = True - def encode(self, session_dict): - """ - Returns the given session dictionary serialized and encoded as a string. - """ - return SessionStore().encode(session_dict) - def save(self, session_key, session_dict, expire_date): - s = self.model(session_key, self.encode(session_dict), expire_date) - if session_dict: - s.save() - else: - s.delete() # Clear sessions with no data. - return s - - -class Session(models.Model): +# https://docs.djangoproject.com/en/4.2/topics/http/sessions/#extending-database-backed-session-engines +class Session(AbstractBaseSession): """ Session objects containing user session information. @@ -36,10 +25,6 @@ class Session(models.Model): Additionally this session object providers the following properties: ``user``, ``user_agent`` and ``ip``. """ - session_key = models.CharField(_('session key'), max_length=40, - primary_key=True) - session_data = models.TextField(_('session data')) - expire_date = models.DateTimeField(_('expiry date'), db_index=True) user = models.ForeignKey(getattr(settings, 'AUTH_USER_MODEL', 'auth.User'), null=True, on_delete=models.CASCADE) user_agent = models.CharField(null=True, blank=True, max_length=200) @@ -48,9 +33,7 @@ class Session(models.Model): objects = SessionManager() - class Meta: - verbose_name = _('session') - verbose_name_plural = _('sessions') - - def get_decoded(self): - return SessionStore(None, None).decode(self.session_data) + # Used in get_decoded + @classmethod + def get_session_store_class(cls): + return SessionStore