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

  • 相关阅读:
    redis-client和redis-template存储的key的格式不一样
    dubbo+zookeeper基础
    java面试题1
    Spring线程池(异步、同步)
    Java并发多线程
    Java并发-并发工具类JUC
    Java并发面试题
    ActiveMQ
    一键部署springboot到Docker
    Quartz任务调度学习
  • 原文地址:https://www.cnblogs.com/os-linux/p/11907827.html
Copyright © 2011-2022 走看看