在Django中缓存半动态视图

时间:2012-04-09 13:30:19

标签: django caching django-templates django-views

我在Django中有一个“半动态”的视图。就我而言,它为首次访问者和回访者提供不同的内容。我知道我的视图在呈现响应之前可以运行各种逻辑,但这会使视图(以及更高)级别的缓存变得不可能,因为不同类型的用户(根据cookie,会话数据或用户数据)将获得不同的回应。

我正在考虑实现这个的几个选项:

  • 从我的视图重定向到另一个缓存的视图。我不喜欢这种方法,因为它会影响UX(更改URL)。我知道如果我想在HTTP服务器级别缓存,我需要选择这种方法。
  • 使用缓存标记缓存模板级别(实际上可以从头到脚缓存整个模板)。这样,我仍然可以为每个案例使用不同的模板。这是一个很好的方法,我想,它仍然涉及运行模板引擎,这是我宁愿避免的。
  • 直接使用缓存框架在视图中自行缓存就绪的HttpResponse对象。实际上这听起来似乎会提供最佳性能,但感觉有点像“重新发明轮子”。

还有其他想法吗?我缺少哪种标准方式?

2 个答案:

答案 0 :(得分:2)

在处理动态响应时,使用缓存模板标记是最佳选择。每当你改变登录用户,会话存储等事情时,你根本就无法缓存整个响应。使用缓存模板标记缓存模板的不变位是下一个最好的选择。然后,至少只需要处理实际的动态部分。

答案 1 :(得分:1)

或者,您可以缓存页面并更改动态页面的位数。这可以使用two-phased-rendering来实现。