2012-04-02 8 views
4

私はdjangoのキャッシュ(ミドルウェアを使用したサイトごとのキャッシュ)を使用しており、キャッシュされたページを匿名ユーザーのみに表示します。Django。匿名のキャッシュのみのコンテンツの配信

CACHE_MIDDLEWARE_ANONYMOUS_ONLY

、それが真の設定:

私はオプションを発見しました。

ログされたユーザー用に生成されたページはキャッシュに保存されませんが、匿名用に生成されたページはキャッシュに保存され、ログに記録されたユーザーに送信されます。

djangoにキャッシュされたコンテンツをログに記録しないようにするにはどうすればよいですか? 私は各ページでユーザーのログイン情報を使用しています(「hi UserName」など)。匿名ユーザーがページをリクエストすると、キャッシュされ、このログインユーザーには「こんにちは匿名!

私の悪い英語のために申し訳ありません。ジョン。 。

答えて

5

あなたが必要とするものはvaryデコレータと思われます。たとえば、あなたは、このコードを使用することができます:

from django.views.decorators.vary import vary_on_headers 

@vary_on_headers('Cookie') 
def my_view(request): 
    # do some stuff 

または同等に

from django.views.decorators.vary import vary_on_cookie 

@vary_on_cookie 
def my_view(request): 
    # do some stuff 

を応答が(例えばユーザがloggesたときにこの問題が発生した)クッキーを変更しない限り、キャッシュされます。 varyでできることは他にもあります。詳細については、this articleまたはthe documentationを参照してください。

また、カスタムミドルウェアでこれを実行して、すべてのビューにこれらのデコレータを追加する必要がなくなります。これは次のように行うことができます。

from django.utils.cache import add_never_cache_headers 

class DisableClientSideCachingMiddleware(object): 
    def process_response(self, request, response): 
     if request.user.is_authenticated(): 
      add_never_cache_headers(response) 
     return response 

私はhereからコードを借りてきました。今ではミドルウェアを追加するだけで、他のことについては心配する必要はありません。

関連する問題