zoukankan      html  css  js  c++  java
  • 请求勾子

    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.




  • 相关阅读:
    【软件构造】Lab1基本流程指导及重难点分析
    【软件构造】关于java中List和Set数据结构不同实现方式和不同遍历方式时间效率的探讨与分析
    程序人生-Hello’s P2P
    WinterCamp2017吃饭睡觉记
    bzoj 3144 [Hnoi2013]切糕
    bzoj 1565 [NOI2009]植物大战僵尸
    bzoj 1061 [Noi2008]志愿者招募
    序列
    Philosopher
    时机成熟之时
  • 原文地址:https://www.cnblogs.com/kongzhagen/p/12985281.html
Copyright © 2011-2022 走看看