先说一下我的现状吧,我刚在自己的博客网站加的 django-redis 作为缓存,当然,这个跟自带的的缓存的使用无差别,所以不讨论 redis 的问题。然后我把缓存都用在的视图和 url 中,如下 2 中方式:
@cache_page(60 * 60 * 24)
def useragent_view(request):
return render(request, 'tool/useragent.html')
然后如果是类视图的话,我是把缓存的方式放到 url 中,如下:
url(r'^tag/(?P<slug>[\w-]+)/$', cache_page(60 * 60 * 2)(TagView.as_view()), name='tag'),
本身我这种用法是没错的,缓存是的确生成了,但是,我发现有很大的问题,因为我的所有的页面都有一个导航栏,而在导航上面是有登录和登出按钮的,而我设置的缓存都是缓存整个页面,所以导致的问题就是用户明明是登录状态,但是有的页面显示登录了,有的页面显示没有登录(没有显示登录的页面无法新登录),反正问题就出在了导航栏的用户登录上面。
其实我能理解这种问题,毕竟我缓存的是整个页面,所以导航栏也是其中的一部分,因此会造成显示上面的问题,我想到的解决办法是吧缓存的方式改成在模板中去缓存,或者把要读取数据库信息的内容缓存在自己创建的标签函数中,请问还有别的方式吗?
1
JasperYanky 2018-04-19 09:42:04 +08:00
颗粒度再细点 看看 Template fragment caching
|
2
jingniao 2018-04-19 19:01:36 +08:00 via Android
缓存,针对的应该是某种程度上可以静态的内容
包含可变内容,就不应该缓存。 个人博客站点,前台可以缓存,然后将后台放出来 |
3
wangyongbo 2018-04-22 22:33:12 +08:00
https://docs.djangoproject.com/en/2.0/topics/cache/
看一下 vary_on_headers 部分 |
4
Hopetree OP @wangyongbo 恩,我之前看文档的时候是仔细看过这个部分的内容,也想过使用这种方式来缓存,但是我后来看了缓存的颗粒度细化的东西之后觉得还是应该把缓存细化一点,不应该整个页面去缓存
|