ITPub博客

首页 > 数据库 > 数据库开发技术 > Flask + Ant Vue 实战 (6)-定义中间件

Flask + Ant Vue 实战 (6)-定义中间件

原创 数据库开发技术 作者:程序员小钟同学 时间:2021-02-24 17:07:12 3 删除 编辑

前言

什么是中间件。类似我们的GO中gin框架的所谓的中间件一样,它就是在我们的一个请求来之前可以做什么,请求完成后做什么。所以某种程度和意义上来说其实就是我们的Flask里面几个钩子函数。

借助于我们的钩子函数我们一样可以定义类似Gin那种中间件。这个中间件一样遵循我们的中间件的洋葱模型。

什么是洋葱模型, 就是一个请求进来的时候,经通过中间件的时候,会一个一个中间件的执行。稍后从我们的演示中可以看得出来。

在我们的具体的模块中间里面定义三个中间件。(仅用于演示)

定义我们的中间件类:

#!/usr/bin/evn python
# coding=utf-8


class MyMiddleware1():

    def __init__(self, *args, **kwargs):
        pass

    def init_app(self, app, _is_handlers_aout=True):
        self.app = app
        if _is_handlers_aout:
            self.register_handlers()
        return self

    def __before_request(self):
        pass
        print('MyMiddleware1-----before_request')

    def __after_request(self, response):
        pass
        print('MyMiddleware1-----after_request=')
        return response

    def teardown_request(self, exc):
        '''
        请求结束的时候提交相关的日志
        :param exc:
        :return:
        '
''
        pass

    def register_handlers(self):
        self.app.before_request(self.__before_request)
        self.app.after_request(self.__after_request)
        self.app.teardown_request(self.teardown_request)


PS:因为只是演示,其他中间一样,之类类目和输出的内容不一样,类名依次的为:

  • MyMiddleware1
  • MyMiddleware2
  • MyMiddleware3

然后在middleware的__init__下初始化我们的中间对象实例:

#!/usr/bin/evn python
# coding=utf-8

from backend.middleware.middleware1 import MyMiddleware1
from backend.middleware.middleware2 import MyMiddleware2
from backend.middleware.middleware3 import MyMiddleware3

middleware1 = MyMiddleware1()
middleware2 = MyMiddleware2()
middleware3 = MyMiddleware3()

在我们的app.py里面进行注册初始化处理 修改我们的app.py中的__init_all_plugins函数方法,再次进行中间件的初始化。


def __init_all_plugins(app):
    '''
     # 全局初始化第三方的插件
    :return:
    '
''
    pass
    # 导入中间件对象实例,使用init_app方式进行钩子函数的注册,_is_handlers_aout=true默认注册
    from backend.middleware import middleware1,middleware2,middleware3
    middleware1.init_app(app)
    middleware2.init_app(app)
    middleware3.init_app(app)
    

重新启动我们的服务,随意的访问我们的一个接口http://127.0.0.1:8808/backend_health,查看日志输出信息:

MyMiddleware1-----before_request
MyMiddleware2-----before_request
MyMiddleware3-----before_request
MyMiddleware3-----after_request=
MyMiddleware2-----after_request=
MyMiddleware1-----after_request=
127.0.0.1 - - [24/Feb/2021 16:35:49] "GET /backend_health HTTP/1.1" 200 -

在对比一下我们的洋葱模式,可以看到第一个中间件和的第一次执行,和最后一次的执行。

END

以上是关于我们的中间定义,后续我们的可以根据这个来扩展我们的日志中间等和鉴权token等。

小钟同学 | 文  【原创】【转载请联系本人】| QQ:308711822


原文作者:程序员小钟同学;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论

注册时间:2021-02-20

  • 博文量
    224
  • 访问量
    111698