django-adminって便利ですよね。
(まぁ昨今のフレームワークなら大体は似たような機能はあるんですが)Modelをえいやーと渡してあげればあら不思議、あっという間にCRUDな画面の完成です。
なんですが、全てを自動的に作ってくれるおかげでレスポンスのヘッダを弄れないという問題が……
いやまぁ普通は弄ることなんてないんですが。
対応策を考える
admin_sample.py
from django.contrib import admin
@admin.register(Hoge)
class HogeAdmin(admin.ModelAdmin):
# なんか色々と続く
とまぁ、Hogeを操作したいな〜と思ったらこういう感じになってると思うんですね。
レスポンスヘッダを設定する場所がない
ので、Djangoのmiddleware機構を使って頑張るしかないかな?と。
レスポンスを返す前に処理を入れられるので、そこでヘッダを操作してやれば……行けるはず!
ミドルウェアを作る
no_cache_middleware.py
class NoCacheMiddleware(object):
def __init(self):
pass
def process_response(self, request, response):
if not response.has_header("Cache-Control"):
response["Cache-Control"] = "no-cache, no-store, must-revalidate"
return response
キャッシュさせたくない! とかであればこんな感じでしょうか。
特定のURLだけとかであれば、request変数でif文を入れて判定させてあげるとして……
settings.py
MIDDLEWARE_CLASSES = [
# なんか色々
'hogehoge.no_cache_middleware.NoCacheMiddleware',
]
後は設定から、今回作成してあげたミドルウェアを読み込ませるようにしてあげればオーケー!
という訳で無事にレスポンスヘッダーを弄れるようになりました。