Я создаю приложение, используя чужой API, позволяющий пользователю просматривать контент со своего сайта. Пользователь может войти в мой проект со своими учетными данными с этого другого сайта, чтобы «избрать» контент со своего сайта.
Когда они входят в систему, я получаю для них user_token. Чтобы не создавать для них пользовательский файл, я просто сохраняю этот токен как переменную сеанса:
# Set session
request.session.set_expiry(60 * 60)
# Save token in session
request.session['user_token'] = unicode(auth.Message)
Я также использую кэширование файлов для контента с сайта:
CACHE_BACKEND = 'файл:///..../кеш/'
И используя команду @cache_page перед определенными представлениями для кэширования данных:
@cache_page(CACHE_TIME)
def listings_by_cat_page(request, category_id):
# view stuff here
Проблема, с которой я сталкиваюсь, заключается в том, что когда пользователь просматривает главный экран (который кэшируется), нажимает «Войти», входит в систему, а затем возвращается на главный экран, кнопка «Вход/выход» не знает, что нужно переключать. Я предполагаю, что это потому, что, поскольку это кешированная страница, она не видит переменную сеанса user_token.
{% if not request.session.user_token %}
<a href="/login{% comment %}?next={{ request.path }}{% endcomment %}" class="login">Login</a>
{% else %}
<a href="/logout/" class="login">Logout</a>
{% endif %}
В идеале я хотел бы кэшировать содержимое, но чтобы страница распознавала изменение в переменных request.session.
Любые идеи?