Целевая страница моего сайта кэшировалась по очевидным причинам:
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)
Однако, поскольку представление кэшируется, пользователь не будет перенаправлен, если исходная целевая страница уже была кэширована. И наоборот.
Я хочу, чтобы представление всегда запускало проверку прав доступа. Если он проходит, он должен перенаправить на новую страницу, которая не должна кэшироваться. Если этого не произойдет, должна быть возвращена целевая страница и она должна быть кэширована.