0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

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

Last updated at Posted at 2024-02-26

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

※ これは2019/7/17に個人ブログで公開した記事を移植し、CC0-1.0で提供しています。情報は古い可能性があります。

キャッシュ禁止にしたい

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 が追加された

0
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
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?