Сеансы Webpy: AttributeError: у объекта 'ThreadedDict' нет атрибута 'имя пользователя'

1

Я делаю 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

Теги:
web.py

3 ответа

3

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

  • 0
    Это хорошее решение. Получение сессионной переменной выглядит так: session_data ['logged_in'] - спасибо Антонис.
2

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

  • 0
    Итак, я понял, но это работает сейчас, просто не спрашивайте меня, как смеется, потому что я понятия не имею. Кроме того, мне пришлось переписать стандартный класс Session web.py, чтобы сделать сеансы глобальными для всего домена, а не для каждого уникального URL, имеющего свой собственный файл cookie сеанса, что для меня действительно не имело смысла.
  • 0
    Для этого вам не нужно создавать подкласс Session, просто установите параметры сеанса: web.config.session_parameters.update(cookie_name="tasty_cookie", cookie_domain="mydomain.com")
Показать ещё 1 комментарий
1

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

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

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

session.get('username', False)

Не:

session.username

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

session_data = session._initializer
session.get('username', session_data['username'])
  • 0
    @ Антонис-Калоу, смотрите больше информации выше. 3 года спустя - но у меня была проблема только сейчас, так что я думаю, что она все еще актуальна.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню