発明者らは、実行中のapp.run()
メソッドの場合、最終的な実行run_simple、最終的な実装アプリ()、即ち、の実装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__()
アプリを保存する前にwsgi_app方法を、次にMyMiddlewareのオブジェクトに変換します。
次に、新しいの実装は、app.wsgi_app()
実行時間MyMiddlewareである__call__()
前に、元のメソッドwsgi_appを呼び出しまたはメソッドの後には、あなたは操作のいずれかを行うことができます