【问题标题】:Switch django cache backend according to URL根据 URL 切换 django 缓存后端
【发布时间】:2021-07-11 16:48:24
【问题描述】:

如何使用 django per-view 缓存,对于同一视图,memcached 用于某些 URL,filesystem 用于其他 URL?

【问题讨论】:

  • 假设您正在使用 cache_page 装饰器,您可以将关键字参数 cache 传递给它,该参数指向特定的缓存。例如,如果 settings.py 包含带有键“default”、“memcached”和“filesystem”的 CACHES 设置,您可以将 cache_page 与 cache="memcached" 用于某些视图,将“filesystem”用于其他视图。跳过此关键字参数将导致使用默认缓存。
  • 如果我需要使用相同的视图,这意味着相同的 cache_page 装饰器调用怎么办?

标签: django caching memcached


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2011-11-15
    • 1970-01-01
    • 2016-09-24
    • 1970-01-01
    • 2019-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多