瓶子()带烧杯中间件?

时间:2015-04-04 18:33:03

标签: python bottle beaker

如何在烧杯会话中使用瓶子子应用程序?

bottlepy.org显示了两者的示例:

子应用 http://bottlepy.org/docs/dev/tutorial.html#plugins-and-sub-applications

会话 http://bottlepy.org/docs/dev/recipes.html#keeping-track-of-sessions

联合

from bottle import Bottle
from beaker.middleware import SessionMiddleware

session_opts = {
    'session.type': 'file',
    'session.cookie_expires': 300,
    'session.data_dir': './data',
    'session.auto': True
}

app = Bottle()
app = SessionMiddleware(app, session_opts)

@app.route('/')
def hello():
    return 'Hello World'

app.run()

这会引发以下错误:

Traceback (most recent call last):
 File "example.py", line 14, in <module>
 @app.route('/')
 AttributeError: 'SessionMiddleware' object has no attribute 'route'

5 个答案:

答案 0 :(得分:1)

答案 1 :(得分:1)

关于使用beaker.SessionMiddleware的轻微警告。它会在每个读取它的请求上写入整个会话。我们在使用多线程服务器时发现了这一点,因为它的写入丢失了(由于明显的竞争条件)。我们为此写了一个替代品(相同的API)。它在这里可用:https://github.com/keredson/drsession

答案 2 :(得分: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)

答案 3 :(得分:0)

import bottle
from beaker.middleware import SessionMiddleware

session = {
    'session.type': 'file',
    'session.cookie_expires': 300,
    'session.data_dir': './data',
    'session.auto': True
}
main_app = bottle.Bottle()
sub_app = bottle.Bottle()

app = SessionMiddleware(main_app, session)

@main_app.route('/')
def index():
     return 'This is app'

@sub_app.route('/')
def sub_app_index():
    return 'This is subapp'

main_app.mount('/sub', sub_app)

bottle.run(app=app)

您也可以从单独的模块中导入子应用程序

答案 4 :(得分:0)

如果您的脚本中只有一个瓶子应用,则可以使用@route代替@app.route