我該如何緩存匿名用戶的頁面,並將其呈現給Django 1.6中的授權用戶?曾經有一個CACHE_MIDDLEWARE_ANONYMOUS_ONLY標誌聽起來很完美,但已被刪除。爲django中的匿名用戶緩存
我在問,因爲每個頁面都有一個菜單欄,顯示登錄用戶的名稱和他/她的個人資料的鏈接。
什麼是正確這樣做的方式?必須是一個常見問題,但我沒有找到通過Django文檔查看的正確方法。
我該如何緩存匿名用戶的頁面,並將其呈現給Django 1.6中的授權用戶?曾經有一個CACHE_MIDDLEWARE_ANONYMOUS_ONLY標誌聽起來很完美,但已被刪除。爲django中的匿名用戶緩存
我在問,因爲每個頁面都有一個菜單欄,顯示登錄用戶的名稱和他/她的個人資料的鏈接。
什麼是正確這樣做的方式?必須是一個常見問題,但我沒有找到通過Django文檔查看的正確方法。
這並不需要在視圖中的任何代碼:
{% with cache_timeout=user.is_staff|yesno:"0,300" %}
{% cache cache_timeout cacheidentifier user.is_staff %}
your content here
{% endcache %}
{% endwith %}
我不確定這是否是實現此目的的「正確」方式,但我正在使用{%cache%}模板標籤來解決此問題。模板的動態用戶名位是我的基礎模板,我緩存如下休息:
{% extends "base.html" %}
{% load cache %}
{% block content %}
{% cache 86400 key-name %}
<h1>My Template in here</h1>
{% endcache %}
{% endblock content %}
通過指定「鍵名」,那麼你可以使用下面的視圖中,以清除高速緩存。如果你需要手動刷新:
key = django.core.cache.utils.make_template_fragment_key('key-name')
cache.delete(key)
上下文= { 「cache_timeout」:300如果request.user.is_anonymous()否則爲0}
{%負載緩存%}
{%緩存cache_timeout「我-cache-fragment「%}
我寫這一次
{%endcache%}
您可以通過創建一個裝飾用下面的辦法:
def cache_for_anonim(timeout):
def decorator(view_func):
@wraps(view_func, assigned=available_attrs(view_func))
def _wrapped_view(request, *args, **kwargs):
if request.user.is_authenticated():
return (view_func)(request, *args, **kwargs)
else:
return cache_page(timeout)(view_func)(request, *args, **kwargs)
return _wrapped_view
return decorator
然後在你的URL:
url(r'^$', cache_for_anonim(3600)(MyView.as_view())),
來源:http://codeinpython.blogspot.com/2017/01/caching-for-anonymous-non-authenticated.html
這不適用於我 – anyavacy