Bottle.py сессия со стаканом

первый раз спрашиваю здесь.

В настоящее время я пытаюсь понять, как правильно использовать стакан при использовании микро-фреймворка Bottle. Вот'С проблемной программой:

#!/usr/bin/python
# -*- coding: utf-8 -*-
# filename: server.py

import bottle as app
from beaker.middleware import SessionMiddleware

session_options = {
    'session.type': 'file',
    'session.data_dir': './session/',
    'session.auto': True,
}
app_middlware = SessionMiddleware(app.app(), session_options)
app_session = app.request.environ.get('beaker.session')

@app.route('/login')
def login():
    app_session = app.request.environ.get('beaker.session')
    app_session['logged_in'] = True

@app.route('/logout')
def logout():
    app_session = app.request.environ.get('beaker.session')
    if app_session.get('logged_in'):
        app_session['logged_in'] = False
        return 'You are logged out'
    app.redirect('/login')

@app.route('/dashboard')
def dashboard():
    app_session = app.request.environ.get('beaker.session')
    if app_session.get('logged_in'):
        return 'You are logged in'
    app.redirect('/login')

app.debug(True)
app.run(app=app_middlware, reloader=True)

Если вы заметили, я продолжаю звонитьapp_session = app.request.environ.get('beaker.session') на каждомdef блок так просто не вернет ошибку вроде:TypeError: 'NoneType' object does not support item assignment --- кажется, что Python нераспознать переменные, которые находятся за пределами его функции (поправьте меня, если ям неправильно).

И вот вопросы:

Что я должен сделать, чтобы иметь только один экземплярapp_session = app.request.environ.get('beaker.session') так что это может быть доступно каждомуdef блоки (мне действительно нужен один экземпляр, так какодин и тот же сеанс, который будет проверен и использован).Если это единственный способ (этохотя это уродливо), тогда я должен просто объединить все маршруты, требующие сеанса, чтобы я мог достичь единственного экземпляра?app_session

Что-то вроде:

@app.route('/')
def url(path):
    app_session = app.request.environ.get('beaker.session')
    if 'login' in path:
        app_session['logged_in'] = True
    elif 'logout' in path:
        if app_session.get('logged_in'):
            # app_session.delete() it doesn't seem to work?
            app_session['logged_in'] = False
            return 'You are logged out'
        app.redirect('/login')
    elif 'dashboard' in path:
        if app_session.get('logged_in'):
            return 'You are logged in'
        app.redirect('/login')

Ответы на вопрос(1)

Ваш ответ на вопрос