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

はじめに

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

キャッシュ禁止にしたい

WSGI サーバで動作させている Django2.2 の Web サイトにおいて、全ページにキャッシュ禁止の HTTP ヘッダーを付加し、キャッシュ禁止にしたいときがありました。
下記を参考に、ミドルウェア(プラグインのようなもの)を追加し、対処します。
ミドルウェア (Middleware) | Django ドキュメント | Django
https://docs.djangoproject.com/ja/2.2/topics/http/middleware/

ミドルウェアの追加

モダンブラウザであれば、Cache-Control ヘッダーのみで十分なキャッシュ制御ができます。
Cache-Control - HTTP | MDN
https://developer.mozilla.org/ja/docs/Web/HTTP/Headers/Cache-Control
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)
HTTP レスポンスヘッダに Cache-Control が追加された

ホームプロフィール外部リンクのため、別ウインドウで開きますプライバシーポリシー

© 2023 Oishi Takanori / Made with Gatsby.js