Технически метод dispatch()
не добавляется, он просто перезаписывает тот, который webapp2.RequestHandler
уже предоставляет, расширяя его для добавления поддержки сеанса. Если вы внимательно посмотрите на этот метод, вы увидите, что он по-прежнему вызывает исходный метод для фактической диспетчеризации:
# Dispatch the request.
webapp2.RequestHandler.dispatch(self)
Который может быть переписан, если хотите, как:
super(BaseHandler, self).dispatch()
Все, что делает расширенный dispatch()
, - это получает информацию о сеансе из хранилища, делая ее доступной для кода обработчика, перед отправкой запроса (который BTW включает в себя обработку запроса) и сохраняет его после этого, когда обработка запроса завершается. (когда возможно изменение информации о сеансе). Для каждого запроса! Просто способ сохранить информацию между запросами.
Поддержка сеанса проста: поддержка - ваше приложение по-прежнему отвечает за управление информацией, хранящейся в словаре сеанса webapp2
, когда эта информация добавляется / изменяется / удаляется и как эта информация используется.
Другими словами webapp2
сам не имеет ни малейшего представления, что такое сеанс входа в систему / выхода из системы / пользователя и т. Д. (Поэтому нет, ничего, что вы упоминаете в # 1, # 2 и # 3, не происходит в самой webapp2
). Ваше приложение отвечает за:
- установка / удаление в словаре сеанса информации, представляющей ваш "пользовательский сеанс" (что бы это ни значило для вашего приложения) - обычно в обработчиках запросов на вход / выход пользователя, соответственно
- используйте эту информацию по своему усмотрению при обработке входящих запросов между входом в систему и выходом из системы - когда информация из словаря сеансов представляет "текущий сеанс пользователя".
Для хранения информации о сеансе webapp2
поддерживает файлы cookie (по умолчанию), memcache и хранилище данных (ndb) . Из сессий:
Он имеет три встроенных бэкэнда: защищенные куки, memcache и
хранилище данных. Новые бэкэнды могут быть добавлены, расширяя
CustomBackendSessionFactory .
Хранилище сеансов может предоставлять несколько сеансов с использованием разных ключей,
даже используя разные бэкэнды в одном запросе, через метод
SessionStore.get_session () . По умолчанию он возвращает сессию, используя
ключ по умолчанию из конфигурации.