美文网首页
自定义Django中间件的知识详解(十二)

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

作者: 梦捷者 | 来源:发表于2019-08-07 13:04 被阅读0次

一、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 端口号

相关文章

网友评论

      本文标题:自定义Django中间件的知识详解(十二)

      本文链接:https://www.haomeiwen.com/subject/cyrodctx.html