Хостинг Django от «Джино»
Table of contents

Кэширование отдельного представления

Более гранулированный способ использования механизма кэширования даёт управление на уровне отдельных представлений. Оно имеет эффект, аналогичный кэшированию отдельных сайтов. Данный способ кэширования можно применять к любому представлению.

Кэширование выполняется с помощью декоратора, который оборачивается вокруг функции представления и изменяет её поведение для использования механизма кэширования. Такой декоратор имеет имя cache_page и находится в модуле django.views.decorators.cache, например:

from django.views.decorators.cache import cache_page

def my_view(request, param):
    # ...
my_view = cache_page(my_view, 60 * 15)

Аналогично, если вы используете Python версии 2.4 и выше, вы можете использовать особый синтаксис для декоратора. Нижеприведённый пример эквивалентен предыдущему:

from django.views.decorators.cache import cache_page

@cache_page(60 * 15)
def my_view(request, param):
    # ...

Декоратор cache_page принимает один аргумент, время жизни страницы в кэше, в секундах. В предыдущем примере, результат работы представления my_view() будет помещён в кэш на 15 минут. Следует отметить, что мы написали 60 * 15 лишь в целях лучшей читаемости. Можно было сразу написать 900.

Кэш для каждого представления, как и кэш для отдельного сайта, зависит от URL. Если несколько URL указывают на одно и то же представление, каждый URL будет кэшироваться отдельно. Продолжая пример с my_view(), если ваш файл со схемой URL выглядит так:

urlpatterns = ('',
    (r'^foo/(\d{1,2})/$', my_view),
)

то запросы к /foo/1/ и /foo/23/ будут закэшированы отдельно, как вы могли ожидать. Но после того как будет произведено кэширование определённого URL, все последующие запросы к нему будут использовать кэш.

Определение кэша для отдельного представления в файле со схемой URL

Примеры из предыдущей секции имели жёстко определённый факт кэширования представления, потому что cache_page() изменяет функцию my_view(). Этот подход связывает ваше представление с механизмом кэширования, который не идеален по нескольким причинам. Например, вам может потребоваться повторно использовать функции представлений в другом сайте, который не имеет механизма кэширования, или может потребоваться передать представления людям, которые пожелают использовать их без применения кэширования. Решением таких проблем является указание кэширования для определённых представления прямо в файле со схемой URL.

Это сделать легко: просто оберните функцию представления с помощью cache_page(). Ниже приведён старый пример файла со схемой URL:

urlpatterns = ('',
    (r'^foo/(\d{1,2})/$', my_view),
)

Здесь приведён тот же пример, но уже с функцией cache_page():

from django.views.decorators.cache import cache_page

urlpatterns = ('',
    (r'^foo/(\d{1,2})/$', cache_page(my_view, 60 * 15)),
)

При использовании этого подхода не следует забывать об импорте функции cache_page() в файле со схемой URL.


Ищем Python программистов

Found misprint?
Select it with the mouse and hit Enter
Ctrl-Enter
Processed:
33 1 199 25


The full repository of DjangoBook translation you can get on GitHub.
We appreciate your patches!

We are glad to hear your questions, comments or suggestions!
(Open in new tab)

Users number: 601

Русская группа

на поддержку перевода
Яндекс Яндекс.Деньги Хочу такую же кнопку
Ускорить процесс перевода!
ЯМ:41001223475816


© 2008-2012 Ruslan Popov @ gmail.com Powered by Django 1.2.5