Django:在页面中缓存除用户身份验证之外的所有内容

时间:2012-12-05 18:45:47

标签: django caching

我正在尝试各种Django 1.3缓存方法,以用于我们的目标网页。此页面包含多个数据库查询以及用户身份验证的结果。到目前为止,性能最佳的解决方案是使用@cache_page decorator来缓存整个视图函数响应。问题是用户身份验证也会被缓存。

我可以为每个用户在缓存中创建一个密钥,但这似乎很浪费;一遍又一遍地缓存相同的登录页面,唯一的区别是用户的身份验证。除了身份验证之外,我还使用了template fragment cachinglow-level caching,但性能远不及@cache_page装饰器方法。

有没有办法在没有大量基于用户的冗余缓存的情况下获得@cache_page的性能?

1 个答案:

答案 0 :(得分:2)

查看此博文:http://www.holovaty.com/writing/django-two-phased-rendering/

基本上,该技术是将用户特定的段包装在模板标记中,以阻止模板引擎呈现它们,然后缓存,然后重新呈现缓存的输出以填充用户详细信息。

Django 1.5包含一个名为verbatim的标记,可用于代替帖子中的自定义raw标记;你仍然需要自定义CachedTemplateMiddleware或等效的。