0

我启用了站点范围的 Django 缓存,但我使用的第三方应用程序没有指定任何缓存控制期望。所以,我猜他们的观点会被缓存。

问题是我不希望 Django 缓存某些应用程序的视图。如何应用 url 级缓存控制include()

url(r"^account/", include("pinax.apps.account.urls")) #How to apply cache control here?
4

1 回答 1

1

你不能。每个站点的缓存是通过中间件实现的,中间件只考虑请求和响应而不是特定的视图。

但是,您可以通过提供修补的 django.middleware.cache.FetchFromCacheMiddleware 来实现这一点。

class ManagedFetchFromCacheMiddle(FetchFromCacheMiddleware):
    def process_request(self, request):
        if should_exempt(request):
            request._cache_update_cache = False
            return
        return super(ManagedFetchFromCacheMiddle, self).process_request(request)

def should_exempt(request):
    """Any predicator to exempt cache on a request
    For your case, it looks like

    if request.path.startswith('/account/'):
        return True
    """

将 'django.middleware.cache.FetchFromCacheMiddleware' 替换为 MIDDLEWARE_CLASSES 中上述路径。

也许上面的通用版本适合向 Django 社区提交补丁 =p

于 2012-03-25T15:40:47.493 回答