Кеширование всего сайта с помощью Django - проблемы с защищенными паролем страницами при выходе - PullRequest
5 голосов
/ 22 октября 2009

Я недавно внедрил кэширование по всему миру, используя memcached в своем приложении Django, я установил TTL примерно на 500 секунд и внедрил кэши для каждого просмотра в других частях веб-приложение.

Проблема, с которой я столкнулся, заключается в том, что когда пользователь выходит из системы, так как это публикация формы, сайт ведет себя так, как ожидается, однако, если он затем переходит на защищенную паролем часть сайта, приложение ведет себя так, как если бы оно все еще входило Если только они не нажали «обновить». Я новичок в кешировании, и мне интересно, могу ли я сделать что-нибудь умное, чтобы предотвратить это?

Ответы [ 2 ]

7 голосов
/ 22 октября 2009

Я столкнулся с похожими проблемами. Стандартный способ Django - отключить кеш для аутентифицированных пользователей.

#settings.py
CACHE_MIDDLEWARE_ANONYMOUS_ONLY=True

Это прекрасно работает, если разные пользователи видят разные страницы (например, их имя пользователя на них), и у вас не может быть одной версии для них.

Но если существует только 2 версии страницы: для аутентифицированных пользователей и для других, то нецелесообразно полностью отключать кеш для аутентифицированных пользователей. Я написал приложение , которое, кроме всего прочего, позволяет в этом случае точно настроить кэш.

Update.

Кстати: вы упомянули, что при нажатии кнопки «обновить» получена правильная версия страницы. Это означает, что проблема заключается в кэше на стороне клиента (Expires header или E-tag), а не в кэше сервера.

Чтобы предотвратить кэширование на стороне клиента (вы должны сделать это, если у вас несколько версий страницы с одним и тем же URL), используйте @cache_control(must_revalidate=True) decorator.

1 голос
/ 22 октября 2009

С точки зрения защищенной паролем части сайта, проверяете ли вы, зарегистрирован ли пользователь или является анонимным, перед извлечением данных (и, возможно, извлечением данных из кэша)?

Ты должен. Django поможет вам, с декоратором требуется логин, который вы можете разместить на виде. Взгляните на это: http://docs.djangoproject.com/en/dev/topics/auth/#the-login-required-decorator

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...