码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2019-10-16 19:35:52      阅读:66      评论:0      收藏:0      [点我收藏+]

标签:==   start   for   def   中间件   sim   方法   port   response   

我们发现在执行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) — 中间件

标签:==   start   for   def   中间件   sim   方法   port   response   

原文地址:https://www.cnblogs.com/863652104kai/p/11687516.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!