Django 中间件实践

需求:原始的登录方法,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表查询过期时间,如果当前时间大于过期时间,说明过期,就重定向的登录页面,重新登录,否则就不做处理

posted @ 2021-08-16 14:10  绝世老中医  阅读(51)  评论(0编辑  收藏  举报