[英]dealing with web.py sessions with subapp?
我已閱讀http://webpy.org/cookbook/sessions_with_subapp 。 當我只有一個應用程序時,該會話工作正常,但是當我創建一個子應用程序時,遇到錯誤〜,詳細信息如下:
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()
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)
嘗試運行時出現錯誤:
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'
您不能簡單地分配session = web.ctx.session
因為僅在應用程序初始化期間執行此行,而ctx
屬性只能在請求時訪問。 您可以from web import ctx
,然后在所有子應用程序中使用ctx.session
而不是session
。
subapp.py示例:
import web
from web import ctx
urls = (
"/", "count",
)
subapp = web.application(urls, globals())
class count:
def GET(self):
ctx.session.count += 1
return str(ctx.session.count)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.