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.




  • 相关阅读:
    springMVC静态资源
    MyBatis Generator
    使用springMVC时的web.xml配置文件
    Semaphore
    spring注解驱动--组件注册
    第1章 初始Docker容器
    docker面试整理
    第5章 运输层
    验证码
    带进度条的上传
  • 原文地址:https://www.cnblogs.com/kongzhagen/p/12985281.html
Copyright © 2011-2022 走看看