请求勾子

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.

 




以上是关于请求勾子的主要内容,如果未能解决你的问题,请参考以下文章

iContact卷曲子代码

创建广告时出现代码 200 和子代码 1487194 的 Facebook 错误背后的原因是啥?

在 SpriteKit 中出现错误。 - 线程 1:EXC_BREAKPOINT(代码=1,子代码=0x1007351fc)

Facebook OAuthException代码190子代码490 - 用户注册了阻塞的登录检查点

斯威夫特 3 - 'EXC_BAD_INSTRUCTION(代码 = EXC_1386_INVOP,子代码 = 0x0)' 错误

错误 - 线程 1 exc_bad_instruction(代码=exc_1386_invop 子代码=0x0)