2015-11-25 6 views
1

Из webapp2 documentation я получил следующий код (не уверен, что это правильно):Использование сессий с webapp2 Python

import webapp2 

from webapp2_extras import sessions 

class BaseHandler(webapp2.RequestHandler): 
    def dispatch(self): 
     self.session_store = sessions.get_store(request=self.request) 
     try: 
      webapp2.RequestHandler.dispatch(self) 
     finally: 
      self.session_store.save_sessions(self.response) 

    @webapp2.cached_property 
    def session(self): 
     return self.session_store.get_session() 

class Login(BaseHandler): 
    def get(self): 

     self.session['foo'] = 'bar' 
     foo = self.session.get('foo') 

Я просто пытаюсь создать базовый сеанс входа в систему один раз регистрирует пользователя в. Но я изучал это довольно долгое время без везения.

То, что я думаю, что происходит:

self.session_store = sessions.get_store(request=self.request) 

Получение сеанса магазин, где я буду хранить необходимые данные пользователя

try: 
     webapp2.RequestHandler.dispatch(self) 
    finally: 
     self.session_store.save_sessions(self.response) 

Обновление магазина сеанса? Не совсем здесь.

@webapp2.cached_property 
def session(self): 
    return self.session_store.get_session() 

Возвращаясь сессию, так что данные внутри могут быть использованы

То, что я не знаю:

  • Что в функции get_store()request=self.request? Не может ли магазин быть общим хранилищем в базе данных серверов, в которой хранятся сеансы?
  • Что такое try,finally: бит для. Очень смутно.
  • Нужно ли нам беспокоиться о идентификаторах сеансов явно. Как использовать идентификатор сеанса для сопоставления информации пользователя в базе данных. Будет ли каждый пользователь иметь соответствующий уникальный идентификатор сеанса.

Приносим извинения, если есть много вопросов, но я очень новый и потерянный. Я смотрел несколько уроков PHP-сессий, но не добился больших успехов.

Благодарим за любые ответы заранее.

ответ

1
  1. Это просто передает текущее значение self.request как «запрос» ключевое слово аргумент для get_store. Я не знаю, что означает вторая часть этого вопроса.

  2. Это гарантирует, что даже если исключение произойдет в блоке try (т.е. внутри вашего кода обработчика), блок finally всегда будет выполнен, поэтому хранилище сеансов всегда будет сохранено.

  3. Вы не должны иметь ничего общего с идентификаторами сеанса; они полностью непрозрачны. Они просто связаны с идентификатором, который пользователь хранит в своем файле cookie. Но отношение к Пользователям - это наоборот; как я уже говорил на ваш последний вопрос, вы бы хранить дб идентификатор записи пользователя в сеансе, когда они войти

Оба вопроса 1 и 2 действительно просто стандартный Python. вы можете воспользоваться учебным пособием по языку.

+0

Спасибо за помощь ... У меня сейчас все работает. Я изучаю язык немного больше, он казался лучшим выбором для начинающих веб-разработчиков на GAE. –

Смежные вопросы