Кэширование всего сайта с помощью Django - проблемы с защищенными паролем страницами при выходе из системы
Вопрос
Недавно я внедрил кэширование по всему сайту, используя сохраненный в памяти в моем приложении Django я установил TTL примерно до 500 секунд и реализовать кэши для каждого просмотра в других частях веб-приложения.
Проблема, с которой я сталкиваюсь, заключается в том, что когда пользователь выходит из системы, поскольку это публикация формы, сайт ведет себя так, как ожидалось, однако, если затем они переходят в защищенную паролем часть сайта, приложение ведет себя так, как будто они все еще вошли в систему, если только они не нажмут "обновить".Я новичок в кэшировании, и мне интересно, могу ли я сделать что-нибудь умное, чтобы предотвратить это?
Решение
Я столкнулся с подобными проблемами.Стандартный способ Django - отключить кэш для прошедших проверку подлинности пользователей.
#settings.py
CACHE_MIDDLEWARE_ANONYMOUS_ONLY=True
Это работает нормально, если разные пользователи видят разные страницы (пример:их имя пользователя на них), и у вас не может быть одной версии для них.
Но если есть только 2 версии страницы:для прошедших проверку подлинности пользователей и для других нецелесообразно полностью отключать кэш для прошедших проверку подлинности пользователей.Я написал приложение это, помимо всего прочего, дает возможность точно настроить кэш в данном случае.
Обновить.
Кстати:вы упомянули, что при нажатии кнопки "Обновить" получается правильная версия страницы.Это означает, что проблема заключается в кэше на стороне клиента (заголовок Expires или E-tag), а не в кэше сервера.
Чтобы предотвратить кэширование на стороне клиента (вы должны сделать это, если у вас есть несколько версий страницы под одним и тем же URL), используйте @cache_control(must_revalidate=True)
декоратор.
Другие советы
С точки зрения защищенной паролем части сайта, проверяете ли вы, зарегистрирован ли пользователь или является анонимным, перед извлечением данных (и, возможно, извлечением данных из кэша)?
Ты должен. Django поможет вам, с декоратором требуется логин, который вы можете разместить на виде. Взгляните на это: http://docs.djangoproject.com/en / DEV / темы / авт / #-Логин-требуется-декоратор