zoukankan      html  css  js  c++  java
  • Flask--特殊装饰器

    特殊装饰器

    Flask 还有两个特殊的装饰器,利用这两个装饰器可以做到Django中间件的效果。

    from flask import Flask
    
    app = Flask(__name__)
    
    @app.before_request
    def f1():
        print("f1")
        # return "f1"   # 可以直接返回数据,就不在往后执行了,参照Django中间件的process_request
    
    @app.after_request
    def f10(response):
        print("f10")
        return response     # 必须有返回值。返回值就是视图函数的返回值,类似Django中间件的process_response
    
    @app.route("/index")
    def index():
        print("index")
        return "ok"
    
    if __name__ == '__main__':
        app.run()
    

    多个特殊装饰器:

    from flask import Flask
    
    app = Flask(__name__)
    
    @app.before_request
    def f1():
        print("f1")
    
    @app.before_request
    def f2():
        print("f2")
    
    @app.after_request
    def f10(response):
        print("f10")
        return response
    
    @app.after_request
    def f20(response):
        print("f20")
        return response
    
    @app.route("/index")
    def index():
        print("index")
        return "ok"
    
    if __name__ == '__main__':
        app.run()
    

    打印结果:

    f1
    f2
    index
    f20
    f10
    

    原因:

    before_request在flask内部维护了一个列表,装饰一个函数就会向列表中添加一个,按照列表的添加顺序执行这些函数。
    after_request在flask内部也维护了一个列表,不同的是在添加完后会翻转一下,在一次执行。
    

  • 相关阅读:
    03-JS事件循环-宏任务与微任务
    10-Promise.all和Promise.race
    nodeJS-04
    nodeJS-03
    01-npm / npm install的过程 -nodemon 自动重启
    nodeJS-02
    nodeJS-01
    01-git
    比较运算符,in,instanceof——第十二级
    TCP(Transmission Control Protocol 传输控制协议)
  • 原文地址:https://www.cnblogs.com/os-linux/p/11907827.html
Copyright © 2011-2022 走看看