flask 的before_request以及after_request

flask的响应函数前(before_request),以及响应函数后(after_request)

# flask 的请求扩展,相当于django的中间件

from flask import Flask, request

app = Flask(__name__)


# 项目启动后接受到的第一个请求,所要执行的函数,整个项目的第一次,和浏览器没有关系
@app.before_first_request
def first():
    print('我是第一次')


# 执行响应函数之前,相当于django中的process_request, 在执行响应函数之前做一些事情
"""
总结:
    请求执行之前的顺序是:谁先注册,谁就先执行
"""
@app.before_request
def before1():
    print('我是before1')
    return 'ok'
"""
注意:如果before_request中有返回值,那后面的before就不会执行,且响应函数也不会执行
        但是after_request任然会全部执行(这里与django不同,django是同级返回)
"""


@app.before_request
def before2():
    print('我是before2')


# 响应函数之后执行,相当于django的process_response,在响应函数之后执行的
"""
总结:
    after_request的执行顺序是:先注册,后执行
"""

@app.after_request
# after_request必须接受一个参数,参数为response对象,且必须返回
def after1(response):
    print('响应后的参数', response)
    print('我是after1')
    return response


@app.after_request
def after2(response):
    print('响应后的参数', response)
    print('我是after2')
    return response


@app.route('/')
def index():
    print('我是响应函数')
    return 'ok'

if __name__ == '__main__':
    """
    app.run()启动项目的本质:run_simple(host, port, self, **options)
    self(请求相关,响应相关), self即app对象
    app(请求相关,响应相关),对象加括号会执行__call__方法
    所以我们看app的__call__方法, 发现__call__就直接调用了另一个方法
    所以我们看另一个方法   wsgi_app
    """
    app.__call__()
    app.run()






posted @ 2020-03-19 16:57  alen_zhan  阅读(449)  评论(0编辑  收藏  举报
返回顶部