washing 2020-05-29
before_request 在处理路由规则对应的 view_function 之前执行的函数, 并且执行顺序是先绑定先执行, 并且先执行 flask app 的 before_request, 再处理 blueprint 的 before_request。示例:
from flask import Flask, request
app = Flask(__name__)
@app.route("/fromuser/<name>")
def user(name):
return "<h1> Hello, {} !</h1>".format(name)
@app.before_request
def before_exec():
print("Start...")
if __name__ == ‘__main__‘:
app.run()
结果:
请求地址: http://127.0.0.1:5000/fromuser/liming
先后台打印Start.., 然后页面返回请求errorhandler: 被触发的前提是 view_function 中抛出了错误, 并且错误码能够匹配上注册的 errorhandler 的错误码.
示例:
from flask import Flask, request, render_template, abort
app = Flask(__name__)
@app.route("/fromuser/<name>")
def user(name):
if name == ‘liming‘:
abort(404) # 1、返回404错误码
return "<h1> Hello, {} !</h1>".format(name)
@app.before_request
def before_exec():
print("Start...")
@app.after_request
def after_exec(response): # 此处必须有参数
print("i am ok...")
return response
@app.errorhandler(404) # 2、接收404错误码,执行err_exec
def err_exec(response):
print("ERR")
if __name__ == ‘__main__‘:
app.run() 被触发的前提是没有异常抛出; 或者异常被 errorhandler 接住并处理. 并且 after_request 执行的顺序是先绑定后执行.
示例
from flask import Flask, request, render_template
app = Flask(__name__)
@app.route("/fromuser/<name>")
def user(name):
return "<h1> Hello, {} !</h1>".format(name)
@app.before_request
def before_exec():
print("Start...")
@app.after_request
def after_exec(response): # 函数必须有参数
print("i am ok...")
return response
if __name__ == ‘__main__‘:
app.run()
#运行结果
Start...
页面显示
i am ok...teardown_request 就和其余的三个不太一样了. 严格的来说 teardown_request 没有固定的执行位置. 因为他直接和请求上下文环境挂钩. 只有在请求上下文被 pop 出请求栈的时候才会触发 teardown_request, 所以即使之前有抛出错误的时候也会都会被执行, 执行完后返回 response.