Пример использование сессий в web.py
На текущий момент использование сессий является проблемой, потому что их по сути нет=)
Хотя в wep.py 0.3 будет добавлен простенький модуль для работы с сессиями.
Авторы
web.py советуют использовать flup для работы с сессиями, но меняю смущает пару вещей:
1) автор сам советует использовать другие средства (в его блоге проскакивало В) )
2) смущает надпись "Some WSGI middleware which may or may not be useful to other projects" + "Removed in 1.0" =)
Поэтому не стал далеко ходить, выбрал Beaker - middleware для работы с сессиями, который по дефолту используется в pylons. Beaker позволяет хранить сессии в dbm файле либо в памяти + в куках. Недостаток лишь 1 - документация гуано, точнее её на офсайте вообще нет, только простой пример. Более внятные детали можно глянуть здесь и здесь.
Подключение в web.py происходит как и во всех WSGI приложениях:
1) SessionMiddleware (как и все другие "прослойки") передаётся ф-цие web.run() 3-м параметром.
2) сессия импортируется из web.ctx.environ['beaker.session'] (ctx - переменная, которая содержит в себе информацию о запросе: ip адрес клиента, тип браузера и тп информацию)
После чего можно использовать сессии.
Простой пример счётчика запросов:
- from beaker.session import SessionMiddleware
- import web
- web.webapi.internalerror = web.debugerror
- def session_mw(app):
- return SessionMiddleware(app)
- urls = (
- '/', 'index',
- )
- class index:
- def GET(self):
- session = web.ctx.environ['beaker.session']
- if not session.has_key('value'):
- session['value'] = 0
- session['value'] += 1
- print (session['value'], session.is_new, session.type)
- session.save()
- if __name__ == '__main__':