flask之中间件

引子:

  flask对象的run方法,调用了 run_simple 方法,run()

 

代码:

# -*- coding: utf-8 -*-


from flask import Flask

app=Flask(__name__)

app.secret_key="sdfsdf"


"""
相关中间件
"""

class Md(object):
def __init__(self,old_wsgi_app):
self.old_wsgi_app=old_wsgi_app

def __call__(self, environ, start_response):
print("开始之前")
ret=self.old_wsgi_app(environ, start_response)
print("开始之后")
return ret





if __name__ == '__main__':
# app.run() 执行后 实际上内部会调用 run_simple(host, port, self, **options)
# 所以self参数就等于 app 在代码中 run_simple加括号调用app 实际上就掉了 app.__call__ 返回的实际上是 wsgi_app 对象
# 所以重新赋值之后 app.wsgi_app 就等于是Md实例之后的对象
# 然后app.run() 调用的时候不再是 原来app.__call__的方法 而是 MD对象实现的__call__方法
# app.__call__()
app.wsgi_app=Md(app.wsgi_app)
app.run()

  

posted @ 2021-02-04 22:05  Yuan_x  阅读(113)  评论(0编辑  收藏  举报