11from django .conf import settings
2+ from django .contrib .sessions .base_session import (
3+ AbstractBaseSession , BaseSessionManager ,
4+ )
25from django .db import models
3- from django .utils .translation import gettext_lazy as _
46
57from .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