访问已创建会话的Pyramid量杯

4 投票
1 回答
2985 浏览
提问于 2025-04-17 10:25

我正在尝试在Pyramid框架中使用pyramid beaker,但它就是不工作。虽然它创建了会话对象,但我无法通过以下代码访问它们。

@view_config(route_name='load_qli', renderer='json')
def load_qli(request):
    request.environ['beaker.session']

这段代码给出了以下错误信息:

KeyError

KeyError: 'beaker.session'

我的development.ini文件看起来是这样的:

# pyramid_beaker settings
session.type = file
session.data_dir = %(here)s/data/sessions/data
session.lock_dir = %(here)s/data/sessions/lock
session.key = customerskey
session.secret = customerssecret
session.cookie_on_exception = true

而init.py文件则是这样的:

from pyramid.config import Configurator
from sqlalchemy import engine_from_config
from qlipe.models import DBSession
from pyramid_mailer import mailer_factory_from_settings
from pyramid_beaker import session_factory_from_settings


def main(global_config, **settings):
    """ This function returns a Pyramid WSGI application.
    """
    engine = engine_from_config(settings, 'sqlalchemy.')
    DBSession.configure(bind=engine)


    # pyramid_beaker add-on
    session_factory = session_factory_from_settings(settings)   

    config = Configurator(
        settings=settings, 
        session_factory=session_factory
    )

我创建会话的方式是这样的:

def my_view(request):
    session = request.session
    session['name'] = 'Fred Smith'
    session.save()

我哪里出错了呢?

1 个回答

5

你可以直接使用包含的方式,pyramid_beaker这个包可以根据ini文件里的值自己初始化。

在你的ini文件中:

pyramid_includes = pyramid_beaker

或者在你主函数的__init__.py文件里:

config.include('pyramid_beaker')

你可以在这里了解更多信息 http://docs.pylonsproject.org/projects/pyramid_beaker/en/latest/#setup

通常访问会话的方法是通过请求,就像你在my_view中做的那样:

session = request.session

pyramid_beaker这个包使用了pyramid的会话工厂,它管理会话的方式并不是通过request.environement['beaker.session']这个对象,和beaker的例子不同。想了解更多信息,可以查看 http://docs.pylonsproject.org/projects/pyramid/en/1.3-branch/narr/sessions.html

撰写回答