0

ビーカー セッションでボトル サブアプリをどのように使用しますか?

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'
4

5 に答える 5

1

そのため、使用に関するわずかな警告beaker.SessionMiddlewareです。それを読み取るすべてのリクエストで、セッション全体を書き込みます。マルチスレッド サーバーを使用しているときに、(明らかな競合状態のために) 書き込みが失われていたため、これを発見しました。このため、ドロップインの代替 (同じ API) を作成しました。ここから入手できます: https://github.com/keredson/drsession

于 2016-07-20T03:37:13.037 に答える
1

答えはここに提供されました: https://github.com/bbangert/beaker/issues/79#issuecomment-89769806

于 2015-04-05T13:45:29.687 に答える
1

チュートリアルとまったく同じコードを実行しようとしましたか?

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)
于 2015-04-04T18:35:01.193 に答える
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)

また、別のモジュールからサブアプリをインポートすることもできます

于 2015-04-05T16:46:39.500 に答える
0

スクリプトにボトル アプリが 1 つしかない場合は、@route代わりに使用できます。@app.route

于 2015-04-22T17:57:22.927 に答える