2014-04-17 34 views
5

IE'nin uyumluluk modunu (res.headers.add("X-UA-Compatible", "IE=Edge") önlemek için yanıt üstbilgilerini değiştirmek amacıyla Flask uygulamasındaki her görünüme uygulamak istediğim bir dekoratörüm (çağrı deco) var. Ben CustomFlask değiştirebileceği bir yolu deco dekoratör uygulamak Şu anda Her Flask görünümüne dekoratör nasıl uygulanır

class CustomFlask(Flask): 
    jinja_options = ... 

app = CustomFlask(__name__, ...) 

var mı (jinja davranışını değiştirmek için) uygulaması oluşturmak için Flask bir alt sınıfını kullanmak

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

gibi onu kullanan tüm tepkiler?

+0

Tam olarak burada yapmaya ne çalışıyorsunuz? Çözmeye çalıştığın kullanım durumu nedir? Bu bir [XY problemi] gibi görünüyor (http://meta.stackexchange.com/q/66377) eğer bir tane görmüşsem. –

+0

IE için. Soruyu güncelledim. – beardc

cevap

7

için başlıkları eklemek için nasıl WSGI öğreticiler açısından hiçbir eksiklik yerine kullanın @Flask.after_request hook vardır:

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

Orada bu, 'u tam olarak yapan Flask extension'dur; Kancayı kaydet ve bir başlık ekle.

+0

Teşekkürler, istediğim bu. Karışıklık için özür dilerim. – beardc

+0

Flask 0.7'den sonra 'after_request' çağrılmayabilir. Bu durumda bir WSGI ara katman yazılımı yazmak daha uygun olabilir. –

+0

@RobYoung: Bunun çağrılmadığını düşünmenizi sağlayan şey nedir? Bunu üretimde 0,7 ile sorun olmadan kullandım. Belki de akışları yanıtlarken mi dönüyorsunuz? –

1

Sadece özel bir WSGI ara katman yazmayı düşünebilirsiniz. Uygulamanızın tüm yanıtlarını yakalayabilir ve başlıkları gerektiği gibi artırabilirsiniz. quickstart bir katman içinde kanca nasıl anlatılır ve her giden yanıta başlıkları eklemek için start_response

+0

Takılabilir görünümlerin burada nasıl yardımcı olacağını anlamıyorum; OP'nin neden dekoratörlerin bunu yapacağını bilmiyorum. –

+0

@MartijnPieters Bir dekoratör gerekli olmayabilir, sadece yanıt başlıklarını değiştirmek için kullanıyorum. – beardc

+0

@BirdJaguarIV: Neden bunun için ['after_request 'kanca] (https://flask.readthedocs.org/en/latest/api/#flask.Flask.after_request) kullanmıyorsunuz? Böyle bir durum için kullanıyorum. –