mirror of
https://github.com/django/django.git
synced 2024-12-25 02:26:12 +00:00
22bb548900
Introduced an AbstractBaseSession model and hooks providing the option of overriding the model class used by the session store and the session store class used by the model.
44 lines
1.2 KiB
Python
44 lines
1.2 KiB
Python
"""
|
|
This custom Session model adds an extra column to store an account ID. In
|
|
real-world applications, it gives you the option of querying the database for
|
|
all active sessions for a particular account.
|
|
"""
|
|
from django.contrib.sessions.backends.db import SessionStore as DBStore
|
|
from django.contrib.sessions.base_session import AbstractBaseSession
|
|
from django.db import models
|
|
|
|
|
|
class CustomSession(AbstractBaseSession):
|
|
"""
|
|
A session model with a column for an account ID.
|
|
"""
|
|
account_id = models.IntegerField(null=True, db_index=True)
|
|
|
|
class Meta:
|
|
app_label = 'sessions'
|
|
|
|
@classmethod
|
|
def get_session_store_class(cls):
|
|
return SessionStore
|
|
|
|
|
|
class SessionStore(DBStore):
|
|
"""
|
|
A database session store, that handles updating the account ID column
|
|
inside the custom session model.
|
|
"""
|
|
@classmethod
|
|
def get_model_class(cls):
|
|
return CustomSession
|
|
|
|
def create_model_instance(self, data):
|
|
obj = super(SessionStore, self).create_model_instance(data)
|
|
|
|
try:
|
|
account_id = int(data.get('_auth_user_id'))
|
|
except (ValueError, TypeError):
|
|
account_id = None
|
|
obj.account_id = account_id
|
|
|
|
return obj
|