我知道django有一些缓存方法,比如每个站点的缓存,每个视图的缓存,指定每个视图的缓存和模板片段缓存,但是这些缓存有什么区别呢?每站点缓存是指缓存系统缓存整个站点吗?我该如何理解“缓存整个网站”这句话呢?
发布于 2011-02-19 22:17:48
我认为文档在描述这一点上做得很好,但我将在这里粘贴它,并给出一些描述。
缓存整个站点意味着django将尝试缓存您通过中间件设置的每个视图。
每站点缓存文档的
http://docs.djangoproject.com/en/dev/topics/cache/#the-per-site-cache
设置缓存后,使用缓存的最简单方法是缓存整个站点。
基本上,它是一组中间件,所以它可以缓存所有视图。中间件应用于每个请求/响应。
每个视图的缓存文档
http://docs.djangoproject.com/en/dev/topics/cache/#the-per-view-cache
使用缓存框架的一种更细粒度的方法是缓存各个视图的输出。django.views.decorators.cache定义了一个cache_page装饰器,它将自动为您缓存视图的响应。
这是一个每个视图的缓存。您可以通过将@cache_page装饰器应用于特定视图来决定缓存特定视图(与上面的所有视图相反)
模板片段缓存文档
http://docs.djangoproject.com/en/dev/topics/cache/#template-fragment-caching
{% cache%}模板标记在给定的时间内缓存块的内容。
这让你可以缓存模板的大块(而不是上面的整个视图),例如,你可以在模板中缓存一个昂贵的查询,而站点的其他部分仍然是动态提供的。
如果某些片段无法缓存,这将非常有用。例如,在顶部显示登录用户的经典问题不可能使用每个视图的缓存,因为用户将需要更新,因此缓存无效。
如果你进一步阅读文档,你也会找到缓存api:
缓存api文档
http://docs.djangoproject.com/en/dev/topics/cache/#the-low-level-cache-api
这基本上就是如何在python代码中获得对缓存的控制(与上面的模板相反)。
# imagine you have a function that takes a day to complete.
cache.set('very_expensive_homepage_logic', takes_a_day_to_calculate())
# now if you call get() with your key, it will be returned and you won't have to wait a day to calculate.
cache.get('very_expensive_homepage_logic')https://stackoverflow.com/questions/5050876
复制相似问题