Skip to content

Commit eb315b2

Browse files
authored
Merge pull request #176 from jazzband/simplify-model
Simplify session model according to Django docs
2 parents 6ccc1a0 + 13a7f1e commit eb315b2

2 files changed

Lines changed: 28 additions & 27 deletions

File tree

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
# Generated by Django 4.2.5
2+
3+
from django.db import migrations, models
4+
5+
6+
class Migration(migrations.Migration):
7+
8+
dependencies = [
9+
('user_sessions', '0003_auto_20161205_1516'),
10+
]
11+
12+
operations = [
13+
migrations.AlterField(
14+
model_name='session',
15+
name='expire_date',
16+
field=models.DateTimeField(db_index=True, verbose_name='expire date'),
17+
),
18+
]

user_sessions/models.py

Lines changed: 10 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,18 @@
11
from django.conf import settings
2+
from django.contrib.sessions.base_session import (
3+
AbstractBaseSession, BaseSessionManager,
4+
)
25
from django.db import models
3-
from django.utils.translation import gettext_lazy as _
46

57
from .backends.db import SessionStore
68

79

8-
class SessionManager(models.Manager):
10+
class SessionManager(BaseSessionManager):
911
use_in_migrations = True
1012

11-
def encode(self, session_dict):
12-
"""
13-
Returns the given session dictionary serialized and encoded as a string.
14-
"""
15-
return SessionStore().encode(session_dict)
1613

17-
def save(self, session_key, session_dict, expire_date):
18-
s = self.model(session_key, self.encode(session_dict), expire_date)
19-
if session_dict:
20-
s.save()
21-
else:
22-
s.delete() # Clear sessions with no data.
23-
return s
24-
25-
26-
class Session(models.Model):
14+
# https://docs.djangoproject.com/en/4.2/topics/http/sessions/#extending-database-backed-session-engines
15+
class Session(AbstractBaseSession):
2716
"""
2817
Session objects containing user session information.
2918
@@ -36,10 +25,6 @@ class Session(models.Model):
3625
Additionally this session object providers the following properties:
3726
``user``, ``user_agent`` and ``ip``.
3827
"""
39-
session_key = models.CharField(_('session key'), max_length=40,
40-
primary_key=True)
41-
session_data = models.TextField(_('session data'))
42-
expire_date = models.DateTimeField(_('expiry date'), db_index=True)
4328
user = models.ForeignKey(getattr(settings, 'AUTH_USER_MODEL', 'auth.User'),
4429
null=True, on_delete=models.CASCADE)
4530
user_agent = models.CharField(null=True, blank=True, max_length=200)
@@ -48,9 +33,7 @@ class Session(models.Model):
4833

4934
objects = SessionManager()
5035

51-
class Meta:
52-
verbose_name = _('session')
53-
verbose_name_plural = _('sessions')
54-
55-
def get_decoded(self):
56-
return SessionStore(None, None).decode(self.session_data)
36+
# Used in get_decoded
37+
@classmethod
38+
def get_session_store_class(cls):
39+
return SessionStore

0 commit comments

Comments
 (0)