在django中缓存匿名用户

时间:2014-01-19 00:40:58

标签: django caching django-templates django-cache anonymous-users

我如何为匿名用户缓存页面,但是为Django 1.6中的授权用户呈现这些页面?曾经有一个CACHE_MIDDLEWARE_ANONYMOUS_ONLY标志听起来很完美,但已被删除。

我问,因为每个页面都有一个菜单栏,显示登录用户的姓名和他/她的个人资料的链接。

正确这样做的方法是什么?必须是一个常见的问题,但我没有找到正确的方式来浏览Django文档。

4 个答案:

答案 0 :(得分:2)

这不需要视图中的任何代码:

{% with cache_timeout=user.is_staff|yesno:"0,300" %}
    {% cache cache_timeout cacheidentifier user.is_staff %}
        your content here
    {% endcache %}
{% endwith %}

答案 1 :(得分:1)

context = {“cache_timeout”:300 if request.user.is_anonymous()else 0}

{%load cache%}
{%cache cache_timeout“my-cache-fragment”%}
    我必须只写一次
{%endcache%}

答案 2 :(得分:0)

我不确定这是否是实现此目的的'正确'方法,但我使用{%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)

答案 3 :(得分:-1)

您可以通过创建装饰器来使用以下方法:

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(r'^$', cache_for_anonim(3600)(MyView.as_view())),

来源:http://codeinpython.blogspot.com/2017/01/caching-for-anonymous-non-authenticated.html