1.flash 的启动流程





2.中间件的介绍

  • flask的中间件 和 Django的中间件 是有所不同的

  • falsk 中间件是在 wsgi_api 方法前后执行操作(即: 在请求刚进来未进行视图函数匹配前执行操作(此时request和session对象还无法使用) 和 匹配到视图函数并且返回处理结果后执行操作)

  • flask 中间件在 wsgi_api 方法前执行操作是无法使用 request 和 session 对象的,如果想获取请求中的数据就需要从 environ 参数中获取

  • wsgi 方法的介绍: 根据不同的请求调用不同的视图函数,然后返回处理结果。即用户输入网址后,看到了网页响应

  • flask 中间件比 before_request 先执行,比 after_request 后执行

  • 在日常开发中很少使用,知道有这个东西就可以了

3.中间件的使用

  • 注意: 需要在终端执行 app.py 才能看到效果,否则使用Pycharm是看不到效果的

# app.py

from flask import Flask, render_template

app = Flask(__name__)


@app.route('/index')
def index():
    return render_template('index.html')


class Middleware(object):
    def __init__(self, old_wsgi_app):
        self.old_wsgi_app = old_wsgi_app  # 等同于 app.wsgi_app

    def __call__(self, environ, start_response):
print('wsgi_app 执行前所要做的操作')
        ret = self.old_wsgi_app(environ, start_response)  # 等同于 app.wsgi_app(environ, start_response)
print('wsgi_app 执行完后所要做的操作')
        return ret


if __name__ == '__main__':
 """
        说明:
            1. 在源码中 wsgi_app 是一个方法
            2. Middleware 对象赋值给 wsgi_app
            3. 此时 wsgi_app 是一个对象,当一个对象加括号(即: 对象())执行的时候就会调用该对象所在的类中的 __call__ 方法
            4. 执行 __call__ 方法
    """
app.wsgi_app = Middleware(app.wsgi_app) # 相当于把 wsgi_app 给更新了
    app.run()