如何仅为未经身份验证的用户缓存视图?

时间:2019-04-04 16:41:44

标签: django django-cache

我有一个视图,只想为未经身份验证的用户缓存。 视图应该是这样的:

@cache_page_for_guests(60 * 15)
def my_view(request):

我看过docs,但找不到但没有任何提示。

实际上,我的问题与this完全一样,尚未回答,我无法理解这些评论。

非常感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

这样编写自定义装饰器:

from django.views.decorators.cache import cache_page

def cache_page_for_guests(cache_life_span):
    def decorator(view_func):
        @wraps(view_func, assigned=available_attrs(view_func))
        def _wrapped_view(request, *args, **kwargs):
            return cache_page(cache_life_span, key_prefix="_auth_%s_" % not request.user.is_authenticated())(view_func)(request, *args, **kwargs)
        return _wrapped_view
    return decorator

然后查看

@cache_page_for_guests(60 * 15)
def my_view(request):

答案 1 :(得分:1)

from functools import wraps
from django.views.decorators.cache import cache_page


def cache_page_for_guests(*cache_args, **cache_kwargs):
    def inner_decorator(func):
        @wraps(func)
        def inner_function(request, *args, **kwargs):
            if not request.user.is_authenticated:
                return cache_page(*cache_args, **cache_kwargs)(func)(request, *args, **kwargs)
           return func(request, *args, **kwargs)
        return inner_function
    return inner_decorator

您可以像cache_page_for_guest一样使用cache_page。它将接受与cache_page相同的参数。根据用户的身份验证,它将显示普通视图或缓存视图。

@cache_page_for_guests(60 * 15)
def my_view(request):