2014-01-20 1 views
0

Документации на бутылках показывают, как использовать мензурку для управления сеансами, как следующегоКак использовать мензурку для нескольких приложений бутылочных

import bottle 
from beaker.middleware import SessionMiddleware 

session_opts = { 
    'session.type': 'file', 
    'session.cookie_expires': 300, 
    'session.data_dir': './data', 
    'session.auto': True 
} 
app = SessionMiddleware(bottle.app(), session_opts) 

@bottle.route('/test') 
def test(): 
    s = bottle.request.environ.get('beaker.session') 
    s['test'] = s.get('test',0) + 1 
    s.save() 
    return 'Test counter: %d' % s['test'] 

bottle.run(app=app) 

Моей проблема, у меня есть несколько приложений для бутылок, и каждый из них служит виртуальный хост (на котором работает вишня). Поэтому я не могу использовать украшение «@ bottle.route», вместо этого мне нужно использовать украшение типа «app1.route ('/ test')», «app2.route ('/ test')».

Но если я деформировать приложение с Beaker промежуточного слоя, как показано на следующем,

app1= Bottle() 
app2= Bottle() 
app1 = SessionMiddleware(app1, session_opts) 
app2 = SessionMiddleware(app2, session_opts) 

когда питон бежать к следующему,

@app1.route('/test') 
def test(): 
    return 'OK' 

он сообщит об ошибке, AttributeError: объект 'SessionMiddleware' имеет no attribute 'route'

Это точно, потому что теперь приложение 1 на самом деле является «SessionMiddleware», а не приложение для бутылок.

Как решить эту проблему?

ответ

1

После копания в исходный код стакана немного, наконец, я нашел путь.

Используйте декоратор таким образом:

@app1.wrap_app.route('/test') 
def test(): 
    return 'OK' 
Смежные вопросы