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

  • 相关阅读:
    清空数据库所有表数据
    sqlserver编号
    Inherits、CodeFile、CodeBehind的区别
    初识NuGet
    ASP.Net各个命名空间及作用
    SQL SERVER数据库性能优化之SQL语句篇
    Exercise 20: Functions And Files
    Exercise 19: Functions And Variables
    Exercise 18: Names, Variables, Code, Functions
    Exercise 17: More Files
  • 原文地址:https://www.cnblogs.com/os-linux/p/11907827.html
Copyright © 2011-2022 走看看