根据 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 的附加参数,但这可能会导致代码复杂,具体取决于您要使用的缓存数量。