Кэширование на уровне представлений Django
Имеется возможность более точно управлять кэшированием - ца уровне отдельных представлений. В модуле django.views.decorators.cache определен декоратор cache_page, который автоматически кэширует результат работы представления, например:
from django.views.decorators.cache import cache_page
def my_view(request): # . ..
my_view = cache_page(my_view, 60 * 15) Или, применяя синтаксис декораторов в версии Python 2.4 и выше:
@cache_page(60 * 15)
def my_view(request): # …
Декоратор cache_page принимает единственный аргумент: время хранения в кэше в секундах. В примере выше результат работы представления my_view() будет храниться в кэше 15 минут. (Отметим, что мы написали 60 * 15, чтобы было понятнее, то есть 15 раз по 60 секунд, итого 900 секунд.)
Элементы кэша на уровне представлений, как и на уровне сайта, индексируются значением URL. Если несколько URL указывают на одно и то же представление, то для каждого URL в кэше будет храниться отдельная версия. Так, если имеется такая конфигурация URL:
urlpatterns = (”.
(г’^foo/(\d{1,2})/$’, my_view),
)
то запросы к /foo/1/ и /foo/23/ будут кэшироваться порознь, как и следовало ожидать. Но после запроса к конкретному URL (например, /foo/23/) все последующие запросы к этому же URL будут удовлетворяться из кэша.
Настройка кэширования на уровне представлений в конфигурации URL
В примерах из предыдущего раздела настройка кэширования на уровне представлений выполняется непосредственно в программном коде, за счет использования декоратора cache_page перед функцией my_view. При таком подходе образуется связь между представлением и системой кэширования, что нежелательно по нескольким причинам. Например, что если вы захотите воспользоваться теми же самыми функциями представления на другом сайте, где кэширование отключено? Или передать их другим разработчикам, которым кэширование не нужно? Для решения этих проблем режим кэширования на уровне представлений следует задавать в конфигурации URL, а не в самих функциях.
Это нетрудно, достаточно обернуть функцию представления функцией cache_page в ссылке, указанной в шаблоне URL. Тогда прежняя конфигурация URL
urlpatterns = (”.
(г’~foo/(\d{1,2})/$’, my_view),
)
примет вид:
from django.views.decorators.cache import cache_page
urlpatterns = (”.
(r’^foo/(\d{1,2>)/$’ , cache_page(my_view, 60 * 15)),
)
He забудьте только импортировать cache_page в конфигурацию URL.
Источник: Головатый А., Каплан-Мосс Дж. Django. Подробное руководство, 2-е издание. - Пер. с англ. - СПб.: Символ- Плюс, 2010. - 560 е., ил.