Как применить контроль кэша Django к включенным URL?

Я включил кеширование Django для всего сайта, но сторонние приложения, которые я использую, не указали никаких ожиданий по управлению кешем. Итак, я предполагаю, что их взгляды будут кэшированы.

Проблема в том, что я не хочу, чтобы Django кэшировал представления некоторых приложений. Как применить контроль кеша на уровне URL к include()?

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

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

Другие вопросы по тегам