Я делаю webapp в python, используя web.py, я настроил таблицы и могу войти в систему как пользователь и все, но инициализатор для сеансов не работает.
В моем коде есть следующее:
store = web.session.DBStore(db, 'sessions')
session = web.session.Session(app, store, initializer={'logged_in': 0, 'username': ''})
render = web.template.render('templates/', base='base', globals={'session': session, 'username': session.username})
Но это вызывает ошибку: AttributeError: объект "ThreadedDict" не имеет атрибута "имя пользователя",
Что может быть сделано? Я в основном просто следовал примеру здесь:
http://webpy.org/cookbook/sessions
У меня была такая же проблема, поэтому я использовал свойство _initializer для получения данных сеанса.
Вот пример:
store = web.session.DBStore(db, 'sessions')
session = web.session.Session(app, store, initializer={'logged_in': 0, 'username': ''})
session_data = session._initializer
render = web.template.render('templates/', base='base', globals={'session': session_data, 'username': session_data['username']})
Затем вы можете получить доступ ко всем данным, которые вы указали в инициализаторе, из сеанса. Если у кого-то есть лучший способ, пожалуйста, дайте мне знать.
PS: Я знаю его поздно, но лучше поздно, а потом никогда...
Сессия загружается только при обработке запроса, вы не можете получить ее атрибуты во время установки.
web.config.session_parameters.update(cookie_name="tasty_cookie", cookie_domain="mydomain.com")
Вы пытаетесь получить переменную сеанса до ее установки.
Я заметил, что session.username
работает в некоторых случаях. Но под WSGI это терпит неудачу.
Это прекрасно работает и находится в документах webpy:
session.get('username', False)
Не:
session.username
Если вы хотите использовать пресеты в инициализаторе, используйте метод в ответе @Antonis-kalou.
session_data = session._initializer
session.get('username', session_data['username'])