django 中间件基础介绍

1、简单的理解,1个中间件就是1个类,中间件一般可以用来检查用户是否登录。

2、用户通过浏览器访问视图函数的内容需要先通过中间件,通过中间件后再到视图函数,返回结果也需要通过中间件,如下草图

 3、自定义一个中间件

3.1 在应用目录下新建 middleware 文件夹,新建一个auth.py文件

我的目录结构:appback-middleware-auth.py

3.2 创建两个类 M1 和 M2

from django.utils.deprecation import MiddlewareMixin
from django.shortcuts import HttpResponse

# 定义一个中间件 M1
class M1(MiddlewareMixin):
    def process_request(self,request):
        print("M1.进来了")

    def process_response(self,request,response):
        print("M1.出去了")
        return response

# 定义一个中间件 M2
class M2(MiddlewareMixin):
    def process_request(self,request):
        print("M2.进来了")

    def process_response(self,request,response):
        print("M2.出去了")
        return response

 3.3 在settings.py 中注册中间件

3.3 重启项目运行,结果如下:

如此两个中间件就算创建成功了,浏览器访问我们的视图函数,先通过 M1 -> M2,返回时是 M2 -> M1。

4、如果  process_request 拥有返回值

4.1 在中间件 M1新增 

return HttpResponse("无权限访问")

如下图

 4.2 再次进入项目,可以发现访问在M1就结束了,并未到 M2以及视图函数。

4.3 如下草图所示:

5、案例登录

5.1 步骤:

1、排除不需要登录就能访问的 url ;

2、获取浏览器中 session 中的用户信息判断是否是登录用户;

3、已经登录过的直接放行,未登录过用户重定向到登录页;

5.2 简易实现代码

class AuthMiddleware(MiddlewareMixin):
    def process_request(self,request):
        # 排除不需要登录就能访问的页面
        if request.path_info == "/login": # 获取当前用户请求的 url
            return
        # 读取当前访问用户的 session 信息
        info_dict = request.session.get("info")
        if info_dict:
            return
        # 没有登录回到登录页面
        return redirect('/login')
    def process_response(self,request,response):
        return response

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值