2013-04-19 2 views
0

Я прочитал http://webpy.org/cookbook/sessions_with_subapp. Сеанс работает отлично, пока я есть только одно приложение, но когда я создать вложенную приложение, я встречая ошибки ~, подробности ниже:, посвященный сессиям web.py с 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' 

ответ

0

Вы не можете просто назначить 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) 
+0

да, я мог бы использовать его только как web.ctx.session.cout. – zjj

+0

Вы можете использовать 'ctx' только из методов контроллера и loadhooks. –

+0

thx за вашу помощь. – zjj

 Смежные вопросы

  • Нет связанных вопросов^_^