需求:原始的登录方法,session默认失效日期是1天,在失效后不会主动推出
目标:当session过期后,再次发起请求就要跳转到登录页面
实现:首先了解,Django的中间件是在项目的settings文件中,MIDDLEWARE 中定义中间件,可以看到,初始化就已经带了很多中间件,比如用户的,session的,csrf的
我这里在项目目录下新建文件MindlewareMixinTest.py,在settings文件MIDDLEWARE中添加MindlewareMixinTest定义的方法,如'julive_data.MindlewareMixinTest.MD1'
from django.utils.deprecation import MiddlewareMixin from django.shortcuts import redirect from django.contrib.sessions.models import Session import logging import datetime log = logging.getLogger("log") class MD1(MiddlewareMixin): def process_request(self, request): log.info("md1 process_request 方法。", id(request)) # 在视图之前执行 log.info(request.session.session_key) session_key = request.session.session_key session = Session.objects.get(session_key=session_key) if session.expire_date < datetime.datetime.now(): log.info("session 已经过期") return redirect('/') else: print("没有过期")
继承MiddlewareMixin,中间件的作用是在请求前,请求后,做一些处理。
这个其实很简单,通过request请求获取浏览器(用户)的唯一ID,用这个ID取session表查询过期时间,如果当前时间大于过期时间,说明过期,就重定向的登录页面,重新登录,否则就不做处理