Flask快速入门(10) — 中间件

Posted 863652104kai

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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方法之前或者之后,就可以做任意的操作了

以上是关于Flask快速入门(10) — 中间件的主要内容,如果未能解决你的问题,请参考以下文章

Flask 快速入门

3000 字 Flask 快速学习指南:从入门到开发

程序猿哥哥带你快速入门Flask框架

基于flask进行微信开发第一部分-flask快速入门

二 Flask快速入门

Flask快速入门(17) — flask_session