1

django のプロジェクトで魔女のキャッシングに少し奇妙な問題があります。

django-admin でページ コンテンツを編集できます。それを行ってサイトを更新すると、何も起こりません。変更には数分待たなければなりません。おもしろいことに、ブラウザー (またはコンピューター) を変更すると、待つ必要はありません。変更がオンになっています。それはdjango、ブラウザ、または何の問題ですか?変更をすぐに取得するように setting.py を設定することは可能ですか?

ちなみに、「django.middleware.cache.FetchFromCacheMiddleware」をオフにすると、問題は消えますが、キャッシュをオフにしたくない...

何か案は?

4

1 に答える 1

1

キャッシュ ミドルウェアを有効にすると、Django はレンダリングされたテンプレートをキャッシュします。次のリクエストが行われると、Django はテンプレートのキャッシュをチェックし、存在する場合は、通常の 200 Found HTTP レスポンスではなく、304 Not Modified を返します。これにより、サーバーから再度プルするのではなく、キャッシュからプルするようにブラウザに指示します。(実際にはこれよりもはるかに複雑ですが、単純化しています)。

要するに、これが Django のキャッシングのしくみです。この動作が望ましくない場合は、DummyCacheバックエンドを使用するように指示して、キャッシュ (キャッシュ ミドルウェアではなく) を無効にすることができます。

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.dummy.DummyCache',
    }
}

これにより、キャッシュされたコピーが見つからないため、Django は常に新しいコピーで 200 を返します。次の設定を settings.py に追加することもできます。

CACHE_MIDDLEWARE_ANONYMOUS_ONLY = True

次に、(管理者またはその他の方法で)ログインしている場合、応答はそれによって異なり、常に新しいコピーが返されます。ただし、公開ログイン機能がある場合、これはサイトの通常のユーザーにも影響します。

于 2012-08-09T14:47:10.330 に答える