Django 粒度页面缓存

Django 粒度页面缓存,django,caching,django-templates,django-1.8,Django,Caching,Django Templates,Django 1.8,缓存我的站点登录页的原因很明显: url(r'^$', cache_page(7200)(vary_on_cookie(LandingPage.as_view())), name='landing_page') 现在,我们引入了一个新页面,如果满足某些条件,我们希望该路由重定向到该页面,主要检查用户是否对某个对象拥有权限: class LandingPage(TemplateView): def dispatch(self, request, *args, **kwargs):

缓存我的站点登录页的原因很明显:

url(r'^$', cache_page(7200)(vary_on_cookie(LandingPage.as_view())), name='landing_page')
现在,我们引入了一个新页面,如果满足某些条件,我们希望该路由重定向到该页面,主要检查用户是否对某个对象拥有权限:

class LandingPage(TemplateView):
    def dispatch(self, request, *args, **kwargs):
        if has_permission(self.request.user, object):
            return redirect('new_page')
        return super(LandingPage, self).dispatch(request, *args, **kwargs)
但是,由于视图已缓存,如果原始登录页已缓存,则不会重定向用户。维切维萨


我希望视图始终运行权限检查。如果通过,它应该重定向到不应该缓存的新页面。如果没有,则应返回登录页,并对其进行缓存。

您可以将
缓存页面
调用从
URL
移动到覆盖的
分派
方法,如下所示:

class LandingPage(TemplateView):
    def dispatch(self, request, *args, **kwargs):
        if has_permission(self.request.user, object):
            return redirect('new_page')
        cached_dispatch = cache_page(7200)(vary_on_cookie(super(
            LandingPage, self
        ).dispatch))
        return cached_dispatch(request, *args, **kwargs)
这样,在返回缓存响应之前将始终执行检查