我启用了站点范围的 Django 缓存,但我使用的第三方应用程序没有指定任何缓存控制期望。所以,我猜他们的观点会被缓存。
问题是我不希望 Django 缓存某些应用程序的视图。如何应用 url 级缓存控制include()
?
url(r"^account/", include("pinax.apps.account.urls")) #How to apply cache control here?
我启用了站点范围的 Django 缓存,但我使用的第三方应用程序没有指定任何缓存控制期望。所以,我猜他们的观点会被缓存。
问题是我不希望 Django 缓存某些应用程序的视图。如何应用 url 级缓存控制include()
?
url(r"^account/", include("pinax.apps.account.urls")) #How to apply cache control here?
你不能。每个站点的缓存是通过中间件实现的,中间件只考虑请求和响应而不是特定的视图。
但是,您可以通过提供修补的 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