自分のサイトのすべてのFlask-Adminビューの応答ヘッダーを変更しようとしています。具体的には、キャッシュヘッダーを設定します。Flask-Adminビューの応答ヘッダーを変更しますか?
@my_blueprint.after_request
def add_my_headers(response):
h = {
'Cache-Control': 'no-cache, no-store, must-revalidate',
'Pragma': 'no-cache',
'Expires': '0'
}
response.headers.extend(h)
return response
そして、これは動作します:
は、通常の青写真のために、それは非常に簡単です。
しかし、私はのようなものをやっているフラスコ-管理ビューのための:これはうまく動作しますが、それはそれを行うにはかなり厄介な方法だ
@app.after_request
def add_my_headers(response):
if request.endpoint[:5] == 'admin':
h = {
'Cache-Control': 'no-cache, no-store, must-revalidate',
'Pragma': 'no-cache',
'Expires': '0'
}
response.headers.extend(h)
return response
return response
。
Flask-Adminは、ブループリントがメインアプリに登録される前にafter_request
機能を登録する方法を提供していないようです。
Flask-Admin BaseView
クラスのcreate_blueprint
メソッドをオーバーライドすることで動作させることができました。ここにインデックスビューがあります。
class MyIndexView(AdminIndexView):
def create_blueprint(self, admin):
"""
Create Flask blueprint.
"""
self.blueprint = super(AdminIndexView, self).create_blueprint(admin)
def my_cache_headers(response):
h = {
'Cache-Control': 'no-cache, no-store, must-revalidate',
'Pragma': 'no-cache',
'Expires': '0'
}
response.headers.extend(h)
return response
self.blueprint.after_request(my_cache_headers)
return self.blueprint
@expose('/')
def index(self):
return self.render('admin/index.html')
これで動作します。私は、これらのヘッダーを私の/admin/
ビューのすべてに適用したいので、@app.after_request
デコレータを使用して、/admin
エンドポイントを確認するのが最善の方法です。
しかし、(特定の管理ビューのcreate_blueprint
メソッドをオーバーライドするように)あまり周りに混乱することなく、before
またはafter
要求機能を登録できるようにするにはいいだろうそれとも細かいことですか?
私が使用した別の方法は、app.after_request_funcs
dictに追加することです。
これらの異なる方法を試した後、私は自分のオリジナルのやり方が最良の方法かもしれないと考え始めていますか?
私の質問は基本的にFlask-Adminビューでカスタム応答ヘッダーを設定するにはどうすればよいですか?