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()
Only you can control your future
You're not alone. You still have family,peopel who care for you and want to save you.