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)

私の問題は、複数のボトル ​​アプリケーションがあり、それぞれが仮想ホスト (cherrypy を使用) を提供していることです。したがって、decorate "@bottle.route" は使用できません。代わりに、 "app1.route('/test')" 、 "app2.route('/test')" のように装飾する必要があります。

しかし、Beaker ミドルウェアで app をワープすると、次のようになります。

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

次のようにpythonを実行すると、

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

AttributeError: 'SessionMiddleware' object has no attribute 'route' というエラーが報告されます

app1 は実際には Bottle アプリではなく「SessionMiddleware」であるため、これは確かです。

その問題を解決する方法は?

4

1 に答える 1