我知道django有一些缓存方法,例如每站点缓存,每视图缓存,指定每视图缓存和模板片段缓存 但这些缓存之间的区别是什么? 每站点缓存意味着缓存系统缓存整个站点? 我如何理解“缓存整个网站”的字样?
答案 0 :(得分:7)
我认为文档可以很好地描述这个,但我会在这里粘贴它并给出一些描述。
缓存整个网站意味着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')