Сеансы Webpy: AttributeError: у объекта 'ThreadedDict' нет атрибута 'имя пользователя' - PullRequest
1 голос
/ 06 ноября 2011

Я делаю 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' нет атрибута 'username'

Что можно сделать?Я просто следовал примеру здесь:
http://webpy.org/cookbook/sessions

Ответы [ 3 ]

3 голосов
/ 04 февраля 2013

У меня была такая же проблема, поэтому я использовал свойство _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: я знаю, что уже поздно, но лучше поздно, чем никогда ...

2 голосов
/ 06 ноября 2011

Сессия загружается только при обработке запроса, вы не можете получить его атрибуты во время установки.

1 голос
/ 27 сентября 2014

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

Я заметил, что session.username работает при некоторых обстоятельствах. Но под WSGI это терпит неудачу.

Это отлично работает и находится в webpy документах:

session.get('username', False)

Не:

session.username

Если вы хотите использовать пресеты в инициализаторе, используйте метод из ответа @ Antonis-kalou.

session_data = session._initializer
session.get('username', session_data['username'])
...