Flask快速入门(10) — 中间件
我们发现在执行app.run()
方法的时候,最终执行run_simple,最后执行app(),也就是执行app.__call__
方法。
在app.__call__
里面,执行的是self.wsgi_app()
,那么我们希望在执行它本身的wsgi_app之前或者之后做点事情。这就是中间件的应用
from flask import Flask
app = Flask(__name__)
# 中间件类
class MyMiddleware:
def __init__(self,wsgi_app):
self.wsgi_app = wsgi_app
def __call__(self, environ, start_response):
print('我是开始之前')
res = self.wsgi_app(environ, start_response)
print('我是所有之后')
return res
@app.route('/')
def index():
print('我是请求')
return 'ok'
@app.before_request
def before():
print('我是请求之前')
@app.after_request
def after(response):
print('我是请求之后')
return response
if __name__ == '__main__':
app.wsgi_app = MyMiddleware(app.wsgi_app)
app.run()
所以,我们先用MyMiddleware类中的__init__()
保存app之前的wsgi_app方法,然后转化成MyMiddleware的对象。
那么在执行新的app.wsgi_app()
的时候就是在执行MyMiddleware中的__call__()
方法,在里面调用原先的wsgi_app方法之前或者之后,就可以做任意的操作了