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

  • 相关阅读:
    codevs 1163:访问艺术馆
    codevs 2853:方格游戏
    冲刺Noip2017模拟赛2 解题报告——五十岚芒果酱
    HDU 1317:XYZZY
    codevs 1380:没有上司的舞会
    POJ 1734:Sightseeing trip
    lesson 23 one man's meat is another man's poison
    wordlist 4
    TPO-12 C1 Revise a Hemingway paper
    lesson 22 by heart
  • 原文地址:https://www.cnblogs.com/os-linux/p/11907827.html
Copyright © 2011-2022 走看看