vdb*_*oor 4 django http-caching
我的访问者从Varnish获得了该页面的缓存版本.我希望管理员用户一直看到该页面的当前版本.这样,所有更改都可以直接显示.
有这样的存在吗?我知道@never_cache装饰者.我正在寻找类似的东西,只有用户没有登录.
如果它适用于Django-CMS,则可获得奖励积分!
我假设您正在使用缓存装饰器.下面的代码是一个装饰器,cache_page只有当用户不是管理员时才返回用另一个装饰器(即)装饰的视图.因此,admin将始终获取非装饰(非缓存)页面,而其他用户将获得装饰(因此可能是缓存)页面.它适用于所有可能的装饰器(不仅仅是cache_page).
def conditional_cache(decorator):
""" Returns decorated view if user is not admin. Un-decorated otherwise """
def _decorator(view):
decorated_view = decorator(view) # This holds the view with cache decorator
def _view(request, *args, **kwargs):
if request.user.is_staff: # If user is staff
return view(request, *args, **kwargs) # view without @cache
else:
return decorated_view(request, *args, **kwargs) # view with @cache
return _view
return _decorator
Run Code Online (Sandbox Code Playgroud)
要使用它,而不是典型的语法:
@cache_page(123)
def testview(request):
(...)
Run Code Online (Sandbox Code Playgroud)
使用:
@conditional_cache(decorator=cache_page(123)) # The argument is what you usually do with views, but without the @
def testview(request):
(...)
Run Code Online (Sandbox Code Playgroud)
我发现有这样的东西:
CACHE_MIDDLEWARE_ANONYMOUS_ONLY = True
Run Code Online (Sandbox Code Playgroud)
如果用户和工作人员之间没有区别,这应该适用于大多数网站。
要显式地向工作人员发送Cache-Control标头,可以编写一些中间件(Cookie遗憾的是,标头也有所不同)。
| 归档时间: |
|
| 查看次数: |
1382 次 |
| 最近记录: |