Skip to content

Instantly share code, notes, and snippets.

@jackeyGao
Last active May 29, 2024 09:38
Show Gist options
  • Select an option

  • Save jackeyGao/b6c606f99deaf7a3af2a6df01873249a to your computer and use it in GitHub Desktop.

Select an option

Save jackeyGao/b6c606f99deaf7a3af2a6df01873249a to your computer and use it in GitHub Desktop.
show message via django messages when django session is expired
from django.utils.deprecation import MiddlewareMixin
from django.contrib import messages
from django.utils import timezone
from django.conf import settings
from django.utils.functional import cached_property
class StateMiddleware(MiddlewareMixin):
@classmethod
def get_model_class(cls):
from django.contrib.sessions.models import Session
return Session
@cached_property
def model(self):
return self.get_model_class()
def session_is_expire(self, session_key):
try:
session = self.model.objects.get(
session_key=session_key
)
if session.expire_date < timezone.now():
return True
except self.model.DoesNotExist as e:
return False
def process_request(self, request):
session_key = request.COOKIES.get(settings.SESSION_COOKIE_NAME)
if self.session_is_expire(session_key):
messages.warning(request, "Session expired, Please log-in again")
SESSION_EXPIRE_AT_BROWSER_CLOSE = True
SESSION_COOKIE_AGE = 10 * 60
SESSION_SAVE_EVERY_REQUEST = True
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'....your app...middleware.StateMiddleware'
]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment