我有一个视图,只想为未经身份验证的用户缓存。 视图应该是这样的:
@cache_page_for_guests(60 * 15)
def my_view(request):
我看过docs,但找不到但没有任何提示。
实际上,我的问题与this完全一样,尚未回答,我无法理解这些评论。
非常感谢您的帮助。
答案 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):