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内部也维护了一个列表,不同的是在添加完后会翻转一下,在一次执行。
    

  • 相关阅读:
    测试方法与步骤
    团队项目需求分析
    第一次个人作业
    3种shell自动交互的方法
    mysql用户管理
    build web application with golang
    安卓中的LINUX内核
    结对项目小结
    关于aria2-yaaw下载软件
    软工结对项目预览
  • 原文地址:https://www.cnblogs.com/os-linux/p/11907827.html
Copyright © 2011-2022 走看看