I have read http://webpy.org/cookbook/sessions_with_subapp. The session works fine while I have only one app, but when I create a sub app, I am encountering error ~ ,details below:
The main.py:
import web
from sub import subapp
web.config.debug = False
urls = ("/sub",subapp,"/", "count",)
app = web.application(urls, globals())
db = web.database(dbn='sqlite', db='./session.db')
store = web.session.DBStore(db, 'sessions')
session = web.session.Session(app, store, initializer={'count': 0})
def session_hook():
web.ctx.session = session
app.add_processor(web.loadhook(session_hook))
class count:
def GET(self):
session.count += 1
return str(session.count)
if __name__ == "__main__":
app.run()
The subapp.py:
import web
urls = ("/", "count",)
subapp = web.application(urls, globals())
session = web.ctx.session
class count:
def GET(self):
session.count += 1
return str(session.count)
Errors while try to run:
Traceback (most recent call last):
File "main.py", line 2, in <module>
from sub import subapp
File "/tmp/session/sub.py", line 9, in <module>
session = web.ctx.session
AttributeError: 'ThreadedDict' object has no attribute 'session'
You can't simply assign
session = web.ctx.sessionbecause this line is executed only during app initialization butctxattributes are only accessible at request time. You mayfrom web import ctxand then usectx.sessioninstead ofsessionin all subapps.subapp.py example: