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