Djangoで全ページキャッシュ禁止にする方法

WSGIサーバで動作させているDjangoのWebサイトで、全ページにHTTPヘッダーを付加し、キャッシュ禁止にする方法を紹介します。

キャッシュ禁止にしたい

WSGIサーバで動作させているDjango2.2のWebサイトにおいて、全ページにキャッシュ禁止のHTTPヘッダーを付加し、キャッシュ禁止にしたいときがありました。

下記を参考に、ミドルウェア(プラグインのようなもの)を追加し、対処します。

ミドルウェア (Middleware) | Django ドキュメント | Django

ミドルウェアの追加

モダンブラウザであれば、Cache-Controlヘッダーのみで十分なキャッシュ制御ができます。

Cache-Control
Cache-Control は HTTP のヘッダーで、リクエストとレスポンスの両方でキャッシュのためのディレクティブ (指示) が格納されています。リクエストで指定されたディレクティブは、レスポンスでも同じディレクティブを使用しなければならないということではありません。

Cache-Controlヘッダーを追加するために、例えば /app/middleware/nocache.py にミドルウェアのPythonファイルを作成します。

from django.conf import settings from django.utils.deprecation import MiddlewareMixin class noCacheMiddleware(MiddlewareMixin): def process_response(self, request, response): response['Cache-Control'] = 'private, no-store, no-cache, must-revalidate, no-transform' return response
スポンサーリンク

setting.pyを編集

setting.pyMIDDLEWARE変数に今回追加したミドルウェアを追加します。

MIDDLEWARE = [ 'app.middleware.nocache.noCacheMiddleware', ]

動作の様子

Djangoレスポンスの例(developモードON)

Cache-Control

プログラミング
この記事を書いた人
まっしろ

お家とインターネットが大好きな20代社会人です。
眠らない街渋谷に住んでいますが、平均睡眠時間は9時間です。
在宅勤務でWebサービスのフロント・バックエンドエンジニアをしています。

フォローする
スポンサーリンク
まっしろブログ

コメント