2017-04-25 48 views
0

所以我有這個網站(Django的1.8),其中有一個主模板,其中的登錄用戶顯示的,所以模板包含Django的緩存和用戶名

{% if user.is_active %} 
{% trans 'Welcome,' %}{% filter force_escape %}{% firstof user.first_name user.username %}{% endfilter %} 

{%ENDIF%}

名稱

所以注意它只在用戶處於活動狀態時顯示。我現在設置緩存,我使用Redis的作爲緩存存儲:

CACHES = { 
    'default': { 
     'BACKEND': 'django_redis.cache.RedisCache', 
     'LOCATION': 'redis://redis:6379/1', 
     'OPTIONS': { 
      'CLIENT_CLASS': 'django_redis.client.DefaultClient', 
     }, 
     "KEY_PREFIX": "mycache", 
    } 
} 

緩存正常工作,但我注意到,也即用戶名在前端緩存。這意味着當用戶註銷時,他的姓名仍然可以看到,如他已登錄,甚至更糟糕,有時會顯示剛剛登錄並觸發緩存的另一個用戶的姓名。當然,我認爲緩存框架會緩存整個頁面。

我的問題是:你如何處理這個問題?我需要某種基於用戶的緩存嗎?還是有更好的方法來避免這種情況?我的意思是,一定有其他人遇到同樣的問題?

回答

1

鑑於症狀,我假設您使用global site cachepage cache。在這兩種情況下,它確實將整個響應保存在緩存中,而不必擔心當前用戶或其他任何問題。

這裏您需要的是使用fragment caching並根據用戶特定的和不是什麼來構建緩存鍵。

+0

啊,這看起來正是我需要的。不知怎的,我錯過了。由於沒有足夠的聲譽而無法贊成,但認爲它已完成。我會測試這個,看看它是否有效。 – mke21