2014-04-17 13 views
5

Ho un decoratore (chiamarlo deco) che vorrei applicare a ogni visualizzazione nell'app Flask, al fine di modificare le intestazioni di risposta per evitare la modalità di compatibilità di IE (res.headers.add("X-UA-Compatible", "IE=Edge"). Io lo uso comeCome applicare un decoratore a ogni vista Flask

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

Attualmente uso una sottoclasse di Flask per creare l'applicazione (per modificare il comportamento Jinja)

class CustomFlask(Flask): 
    jinja_options = ... 

app = CustomFlask(__name__, ...) 

C'è un modo posso modificare CustomFlask applicare deco decoratore a tutte le le risposte?

+0

Che cosa stai cercando di fare esattamente qui? Qual è il caso d'uso che stai cercando di risolvere? Questo mi sembra un [problema XY] (http://meta.stackexchange.com/q/66377) se mai ne ho visto uno. –

+0

È per IE. Ho aggiornato la domanda. – beardc

risposta

7

Per aggiungere intestazioni per ogni risposta in uscita, utilizzare il @Flask.after_request hook invece:

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

Ci è un Flask extension che fa esattamente questo; registra il gancio e aggiungi un'intestazione.

+0

Grazie, questo è quello che voglio. Mi dispiace per la confusione. – beardc

+0

Si noti che a partire da Flask 0.7 'after_request' non può essere chiamato. In questo caso scrivere un middleware WSGI potrebbe essere più appropriato. –

+0

@RobYoung: cosa ti fa pensare che non venga chiamato? L'ho usato in produzione con 0.7 senza problemi. Stai forse restituendo le risposte in streaming? –

1

Si potrebbe considerare solo la scrittura di un middleware personalizzato WSGI. È possibile limitare tutte le risposte dell'applicazione e aumentare le intestazioni secondo necessità. Il quickstart discute come collegare in un middleware e non ci sono carenza di WSGI tutorial su come aggiungere intestazioni al start_response

+0

Non vedo come le viste collegabili possano aiutare qui; Non sono sicuro del motivo per cui l'OP pensa che i decoratori lo farebbero. –

+0

@MartijnPieters Un decoratore potrebbe non essere necessario, lo sto solo usando per modificare le intestazioni di risposta. – beardc

+0

@BirdJaguarIV: Perché non usare l'hook ['after_request'] (https://flask.readthedocs.org/en/latest/api/#flask.Flask.after_request) per quello? Questo è quello che uso per una situazione del genere. –

Problemi correlati