LoginSignup
4
1

More than 5 years have passed since last update.

django-adminで構成したページのレスポンスヘッダを弄りたい

Posted at

django-adminって便利ですよね。
(まぁ昨今のフレームワークなら大体は似たような機能はあるんですが)Modelをえいやーと渡してあげればあら不思議、あっという間にCRUDな画面の完成です。

なんですが、全てを自動的に作ってくれるおかげでレスポンスのヘッダを弄れないという問題が……
いやまぁ普通は弄ることなんてないんですが。

対応策を考える

admin_sample.py
from django.contrib import admin

@admin.register(Hoge)
class HogeAdmin(admin.ModelAdmin):
   # なんか色々と続く

とまぁ、Hogeを操作したいな〜と思ったらこういう感じになってると思うんですね。
レスポンスヘッダを設定する場所がない:innocent:

ので、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',
]

後は設定から、今回作成してあげたミドルウェアを読み込ませるようにしてあげればオーケー!

という訳で無事にレスポンスヘッダーを弄れるようになりました。

4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1