2009-03-03 4 views
7

после кэширования нескольких представлений моего проекта django - @ cache_page (60 * 5) - Я заметил, что memcached кэширует весь вид, даже аргумент запроса! Поэтому, если первый пользователь, который посещает страницу, регистрируется как userxyz, все остальные анонимные или зарегистрированные пользователи, которые будут запрашивать одну и ту же страницу, будут представлены на странице, которая была кэширована пользователем userxyz! Очевидно, это не желаемое поведение ... Так что я могу кэшировать все в представлении, но не аргумент запроса? Или memcached подходит только для анонимных сеансов?запрос кэшированных memcached?

Спасибо заранее, Markos Gogoulos

ответ

6

Если вы смешиваете динамические и статические данные на одной странице, в вашем случае динамических данных вошедшего пользователя пользователя, то кэширование страниц не является правильным выбором , Это не изменится, если вы используете файловое хранилище кеша вместо memcached.

Предлагаю попробовать кеширование фрагментов. Вы можете сделать что-то вроде этого:

{% load cache %} 
{% cache 500 sidebar %} 
    .. sidebar .. 
{% endcache %} 

Это будет кэшировать содержимое тега кэша на 500 секунд с боковой панели идентификатора.

Вы можете найти более подробную информацию о кэшировании здесь:

http://docs.djangoproject.com/en/dev/topics/cache/


Если это страница, которая собирается ударить очень часто, например, страницу приветствия, что вы чувствуете, принесет пользу от использования кэширования страниц по кешированию фрагментов (например, единственными динамическими данными являются имя пользователя), тогда есть несколько других вариантов.

Скажите, например, что вы хотите иметь полностью статическую страницу, за исключением раздела входа/выхода в верхней части страницы, в котором отображаются разные ссылки в зависимости от того, зарегистрирован ли пользователь, или вы можете проверить наличие файла cookie для проверки подлинности когда страница сначала загружается и условно отображает разные данные с помощью javascript.

2

Memcached - это всего лишь бэкэнд. Он кэширует все, что вы скажете, чтобы кэшировать. Так что действительно ваш вопрос: «Является ли полноэкранное кэширование Django подходящим для динамических страниц?» Возможно, вы не хотите заполнять полные страницы, просто часть его. Или только страницы для анонимных запросов (с использованием CACHE_MIDDLEWARE_ANONYMOUS_ONLY)

Обратитесь к книге http://www.djangobook.com/en/1.0/chapter13/

0

Вы можете захотеть взглянуть на template fragments и кэширование эти биты контента, которые не конкретного пользователя.

Смежные вопросы