如何将装饰器应用于每个Flask视图

时间:2014-04-17 15:25:06

标签: python flask decorator python-decorators

我有一个装饰器(称之为deco),我想将其应用于我的Flask应用程序中的每个视图,以便修改响应头以避免IE的兼容模式({{1 }})。我像

一样使用它
res.headers.add("X-UA-Compatible", "IE=Edge"

我目前使用@app.route('/') @deco def index(): return 'Hello world' 的子类来创建应用程序(以修改jinja行为)

Flask

我是否有办法修改class CustomFlask(Flask): jinja_options = ... app = CustomFlask(__name__, ...) 以将CustomFlask装饰器应用于所有回复?

2 个答案:

答案 0 :(得分:7)

要为每个传出回复添加标头,请改用@Flask.after_request hook

@app.after_request
def add_ua_compat(response):
    response.headers['X-UA-Compatible'] = 'IE=Edge'
    return response

Flask extension 完全这个;注册钩子并添加标题。

答案 1 :(得分:1)

您可以考虑编写自定义WSGI中间件。您可以抓住所有应用程序的响应并根据需要扩充标题。 quickstart讨论了如何挂钩中间件,并且关于如何向WSGI

添加标头的start_response教程并不缺乏