2014-04-17 37 views
5

我有一个装饰器(称为deco),我想将它应用于Flask应用中的每个视图,以便修改响应头以避免IE的兼容模式(res.headers.add("X-UA-Compatible", "IE=Edge")。我使用它像如何将装饰器应用于每个烧瓶视图

@app.route('/') 
@deco 
def index(): 
    return 'Hello world' 

我目前使用的Flask子类来创建应用程序(修改神社的行为)

class CustomFlask(Flask): 
    jinja_options = ... 

app = CustomFlask(__name__, ...) 

有没有一种方法,我可以修改CustomFlaskdeco装饰应用到所有反应?

+0

你究竟想在这里做什么?你试图解决的用例是什么?如果我看到一个,这就像[XY问题](http://meta.stackexchange.com/q/66377)。 –

+0

这是为IE浏览器。我更新了这个问题。 – beardc

回答

7

为标题添加到每个传出响应不乏其人,使用@Flask.after_request hook代替:

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

有是Flask extension正好是这个;注册挂钩并添加标题。

+0

谢谢,这是我想要的。对此感到抱歉。 – beardc

+0

请注意,可能不会调用Flask 0.7'after_request'。在这种情况下编写WSGI中间件可能更合适。 –

+0

@RobYoung:什么让你觉得它不叫?我已经在0.7中使用了这个,没有问题。你可能正在返回流式响应? –

1

你可能会考虑写一个自定义的WSGI中间件。您可以拦截应用程序的所有响应,并根据需要增加标题。该quickstart讨论如何在中间件钩也有WSGI教程如何标题添加到start_response

+0

我看不出可插入的视图在这里会有帮助;我不确定OP为什么认为装饰者会这样做。 –

+0

@MartijnPieters装饰器可能不是必需的,我只是用它来修改响应头。 – beardc

+0

@BirdJaguarIV:为什么不使用['after_request' hook](https://flask.readthedocs.org/en/latest/api/#flask.Flask.after_request)?这就是我用于这种情况。 –

相关问题