LoginSignup
0

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

Posted at

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

※ これは2019/7/17に個人ブログで公開した記事を移植したものです。

キャッシュ禁止にしたい

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

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

ミドルウェアの追加

モダンブラウザであれば、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 が追加された

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
0