Главная | Архив новостей | Общение | Площадка | Примеры OpenID
Хостинг Django от «Джино»
Оглавление

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

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

Кэширование выполняется с помощью декоратора, который оборачивается вокруг функции представления и изменяет её поведение для использования механизма кэширования. Такой декоратор имеет имя 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.


Увидели ошибку?
Выделите её мышкой и нажмите
Ctrl-Enter
Обработано:
1049 49 130 71

Версия книги
1.0 2.0
Версия 2.0 в процессе перевода!

Мой луч
Многообразие света

Полезное
Актуальные вакансии, Python работа для python-разработчиков.


Скачать в формате
CHM от 2 сентября

Заказать PDF файл можно через почту, чат, джаббер. Всего 2WMZ. Содержимое точно соответствует содержимому сайта.
Чем чаще заказываете — тем больше перевожу.

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

на поддержку перевода
Яндекс Яндекс.Деньги Хочу такую же кнопку
Ускорить процесс перевода!
R130494980980
Z425285133788
E112528079659
U327380922061

Книга помогла реализовать:
Проект «Мой луч»
АРМ УФМС.


Мой вебсайт стоит666 337,31 руб

© 2008-2009 Ruslan Popov @ gmail.com Powered by Django 1.1 beta 1 SVN-11114
Главная | Архив новостей | Общение | Площадка | Примеры OpenID