请求勾子
Posted kongzhagen
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了请求勾子相关的知识,希望对你有一定的参考价值。
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()
after_request
被触发的前提是没有异常抛出; 或者异常被 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.
以上是关于请求勾子的主要内容,如果未能解决你的问题,请参考以下文章
创建广告时出现代码 200 和子代码 1487194 的 Facebook 错误背后的原因是啥?
在 SpriteKit 中出现错误。 - 线程 1:EXC_BREAKPOINT(代码=1,子代码=0x1007351fc)
Facebook OAuthException代码190子代码490 - 用户注册了阻塞的登录检查点
斯威夫特 3 - 'EXC_BAD_INSTRUCTION(代码 = EXC_1386_INVOP,子代码 = 0x0)' 错误