自定义Django中间件的知识详解(十二)

一、Django 中间件的运行流程

  • django的生命周期是:前端请求--->nginx--->uwsgi--->中间件--->url路由---->view试图--->orm---->拿到数据返回给view---->试图将数据渲染到模版中拿到字符串---->中间件--->uwsgi---->nginx---->前端渲染。
  • Django中的中间件是一个轻量级、底层的插件系统,可以介入Django的请求和响应处理过程,修改Django的输入或输出。中间件的设计为开发者提供了一种无侵入式的开发方式,增强了Django框架的健壮性。
  • 我们可以使用中间件,在Django处理视图的不同阶段对输入或输出进行干预。

二、中间件的定义方法

  • 定义一个中间件工厂函数,然后返回一个可以别调用的中间件。

  • 中间件工厂函数需要接收一个可以调用的get_response对象。

  • 返回的中间件也是一个可以被调用的对象,并且像视图一样需要接收一个request对象参数,返回一个response对象。

  • 中间件的示例如下:

def middleware(get_response):
    # 此处编写的代码仅在Django第一次配置和初始化的时候执行一次。

    def middleware(request):
        # 此处编写的代码会在每个请求处理视图前被调用。

        response = get_response(request)

        # 此处编写的代码会在每个请求处理视图之后被调用。

        return response

    return middleware
  • 例如,在users应用中新建一个middleware.py文件
def my_middleware(get_response):
    print('init 被调用')
    def middleware(request):
        print('before request 被调用')
        response = get_response(request)
        print('after response 被调用')
        return response
    return middleware

'users.middleware.my_middleware',  # 添加中间件
  • 定义一个视图函数进行测试在users.py文件下进行定义
def demo_view(request):
    print('view 视图被调用')
    return HttpRespon se('OK')

三、多个中间件的执行顺序

以下是在项目主目录下settings.py文件下进行

  • 在请求视图被处理,中间件由上至下依次执行
  • 在请求视图被处理,中间件由下至上依次执行
举例:重新定义一个中间件
def my_middleware2(get_response):
    print('init2 被调用')
    def middleware(request):
        print('before request 2 被调用')
        response = get_response(request)
        print('after response 2 被调用')
        return response
    return middleware

四、知识点补充

1、如果开启django的时候端口被占用,可用下面的方式来查看端口的情况。

ps  -e  | grep python

2、杀死被占用的端口

kill  -9 端口号
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容