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方法之前或者之后,就可以做任意的操作了

posted @ 2019-10-16 18:37  Never&say&die  阅读(229)  评论(0编辑  收藏  举报