2012-04-02 52 views
4

我正在使用django緩存(使用中間件的每站點緩存),並且只想向匿名用戶顯示緩存頁面。Django。只爲匿名服務緩存內容

我發現了一個選項:

CACHE_MIDDLEWARE_ANONYMOUS_ONLY

,並將其設置爲True。

它爲記錄的用戶生成的頁面不會被保存到緩存,而是爲匿名生成的頁面被保存到緩存併發送給記錄的用戶。

如何強制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 articlethe 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的代碼。現在您只需添加中間件,而不必擔心其他任何問題。