2009-03-03 171 views
7

在我的django项目上缓存几个视图 - @ cache_page(60 * 5) - 我注意到memcached缓存了整个视图,甚至请求参数!因此,如果第一个访问某个页面的用户以userxyz身份登录,那么所有其他匿名或注册用户都会询问相同的页面,并且会显示用户userxyz缓存的页面!显然,这不是一个理想的行为...所以我可以缓存一切视图,但不是请求参数?或者memcached只适用于匿名会话?memcached缓存请求?

由于提前, 马科斯Gogoulos

回答

6

如果你混在一个页面上的动态和静态数据,你的情况的动态数据在登录用户的用户名,然后页面缓存是不是正确的选择。如果您使用基于文件的缓存而不是memcached,则这不会改变。

我建议尝试片段缓存。你可以做这样的事情:

{% load cache %} 
{% cache 500 sidebar %} 
    .. sidebar .. 
{% endcache %} 

这将缓存500秒与标识栏缓存标签的内容。

你可以在这里找到更多的信息缓存:

http://docs.djangoproject.com/en/dev/topics/cache/


如果这是将是非常经常打,例如一个欢迎页面一个页面,你觉得将受益从使用页面缓存到片段缓存(例如,唯一的动态数据是用户名),还有其他一些选项。

举个例子,你想要有一个完全静态的页面,除了顶部的一个登录/注销部分,根据用户是否登录显示不同的链接,然后你可以检查是否存在身份验证cookie当页面第一次加载并有条件地显示不同的数据使用JavaScript。

2

Memcached只是一个后端。它缓存你告诉缓存的任何内容。所以真的你的问题是“Django的整页缓存适合动态页面吗?” 也许你不希望缓存整页,只是它的一部分。还是只有网页匿名请求(使用CACHE_MIDDLEWARE_ANONYMOUS_ONLY

参考本书 http://www.djangobook.com/en/1.0/chapter13/