Django进阶–中间件-初识

Django进阶–中间件

1. 简介

中间件是Dajngo框架对request/response响应的轻量级插件系统。作用于用户和视图函数之间。


2. 使用

2.1 创建模块

在app下创建一个自定义中间件模块`

-project                  #项目名
	-project
	-book                 #app名
		-Middleware.py   # 起名随意

2.2 编写

def simple_middleware(get_response):  #可以编写函数中间件
    # 仅在项目启动时运行一次
    print('函数中间件项目启动运行')

    def middleware(request):
        # 对于每个request请求,调用视图函数之前运行
        print('函数中间件视图函数被调用前运行')

        response = get_response(request)  #调用视图函数

        # 对于每个request请求,调用视图函数之后运行
        print('函数中间件视图函数被调用后运行')

        return response

    return middleware


class SimpleMiddleware:           #也可以编写类中间件
    def __init__(self, get_response):
        self.get_response = get_response
        # 仅在项目启动时运行一次
        print('类中间件项目启动运行')

    def __call__(self, request):
        # 对于每个request请求,调用视图函数之前运行
        print('类中间件视图函数被调用前运行')

        response = self.get_response(request)

        # 对于每个request请求,调用视图函数之后运行
        print('类中间件视图函数被调用后运行')
        return response

2.3 注册

settings.py中注册

MIDDLEWARE = [
    'book.middleware.SimpleMiddleware',
    'book.middleware.simple_middleware',

]

注意:此处我们先注册了类中间件

2.4 验证

启动项目,发送请求

Starting development server at http://0.0.0.0:8000/
Quit the server with CONTROL-C.
函数中间件项目启动运行
类中间件项目启动运行
#发送一次请求后
类中间件视图函数被调用前运行   
函数中间件视图函数被调用前运行
#执行一次请求后
视图函数被调用
函数中间件视图函数被调用后运行
类中间件视图函数被调用后运行
[01/Apr/2019 10:51:30] "GET /book/students/ HTTP/1.1" 200 9167

2.5 流程

基于注册先后顺序(若函数中间件先注册,调用顺序相反)

在这里插入图片描述

  1. 启动时的调用顺序:栈式结构,先注册者后调用
  2. 请求时的调用顺序:洋葱模型、先注册者先调用、访问到洋葱核心(视图函数)再原路返回。

对于第2条详解,将每一个注册的中间件想象为洋葱的一层,先注册的在外层。请求到来时,从最外层,层层深入直到视图函数;然后再原路返回,直到最外层。


3. 补充

参考文献:官方文档

心蓝没有墨染帅气,不过比墨染有菜花?

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值