根据 URL 切换 django 缓存后端
Switch django cache backend according to URL
如何使用 django per-view
缓存,对于同一视图,某些 URL 使用 memcached
缓存,而对其他 URL 使用 filesystem
缓存?
我认为 Django 没有针对此问题提供解决方案。但是,您可以基于 cache_page
.
创建装饰器
from django.views.decorators.cache import cache_page
def smart_cache_page(timeout):
def outer(view):
cached_with_memcached = cache_page(timeout, cache="memcached")(view)
cached_with_filesystem = cache_page(timeout, cache="filesystem")(view)
def inner(request, *args, **kwargs):
if condition_to_use_memcached: # build the condition based on request, args and kwargs which will be different per request
return cached_with_memcached(request, *args, **kwargs)
else:
return cached_with_filesystem(request, *args, **kwargs)
return inner
return outer
@smart_cache_page(60)
def my_view(request):
# view code
现在,装饰器将根据您为每个请求设置的条件 smart_cache_page
来决定使用哪个缓存。
请记住,您以这种方式装饰的每个视图都将使用相同的逻辑。如果您需要更大的灵活性,您可以将条件作为 smart_cache_page
的附加参数,但这可能会导致代码复杂,具体取决于您要使用的缓存数量。
如何使用 django per-view
缓存,对于同一视图,某些 URL 使用 memcached
缓存,而对其他 URL 使用 filesystem
缓存?
我认为 Django 没有针对此问题提供解决方案。但是,您可以基于 cache_page
.
from django.views.decorators.cache import cache_page
def smart_cache_page(timeout):
def outer(view):
cached_with_memcached = cache_page(timeout, cache="memcached")(view)
cached_with_filesystem = cache_page(timeout, cache="filesystem")(view)
def inner(request, *args, **kwargs):
if condition_to_use_memcached: # build the condition based on request, args and kwargs which will be different per request
return cached_with_memcached(request, *args, **kwargs)
else:
return cached_with_filesystem(request, *args, **kwargs)
return inner
return outer
@smart_cache_page(60)
def my_view(request):
# view code
现在,装饰器将根据您为每个请求设置的条件 smart_cache_page
来决定使用哪个缓存。
请记住,您以这种方式装饰的每个视图都将使用相同的逻辑。如果您需要更大的灵活性,您可以将条件作为 smart_cache_page
的附加参数,但这可能会导致代码复杂,具体取决于您要使用的缓存数量。