Кэширование всего сайта с помощью Django - проблемы с защищенными паролем страницами при выходе из системы

StackOverflow https://stackoverflow.com/questions/1608521

  •  05-07-2019
  •  | 
  •  

Вопрос

Недавно я внедрил кэширование по всему сайту, используя сохраненный в памяти в моем приложении 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 / темы / авт / #-Логин-требуется-декоратор

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top