2012-06-25 60 views
4

我试图学习金字塔和有问题得到消息闪光灯工作。我是全新的,但阅读文档并做了教程。金字塔错误:AttributeError:没有会话工厂注册

我做了关于创建wiki的教程(tutorial here,Code here)。它工作的很好,很容易,所以我决定尝试应用我在待办事项列表教程中看到的Flash消息(tutorial here,完整代码位于页面底部的单个文件中)。基本上,当创建待办事项列表时,会刷新页面,显示“新任务已成功添加!”。每次有人在wiki教程中更新wiki文章时,我都想这样做。

所以我重新读入文件建立的会话部分,它说我真的需要这样做:

from pyramid.session import UnencryptedCookieSessionFactoryConfig 
my_session_factory = UnencryptedCookieSessionFactoryConfig('itsaseekreet') 
from pyramid.config import Configurator 
config = Configurator(session_factory = my_session_factory) 

然后在我的代码,我需要添加:request.session.flash('New wiki was successfully added!')但我得到一个错误每次:金字塔错误:AttributeError的:无会话工厂注册

这里是我的功能(其从教程完全相同的除了request.session.flash部分):

@view_config(route_name='edit_page', renderer='templates/edit.pt', permission='edit') 
def edit_page(request): 
    name = request.matchdict['pagename'] 
    page = DBSession.query(Page).filter_by(name=name).one() 
    if 'form.submitted' in request.params: 
     page.data = request.params['body'] 
     DBSession.add(page) 
     request.session.flash('page was successfully edited!') 
     return HTTPFound(location = request.route_url('view_page', 
                 pagename=name)) 

    return dict(
     page=page, 
     save_url = request.route_url('edit_page', pagename=name), 
     logged_in=authenticated_userid(request), 
     ) 

(注意:我认为我可能做错的一件事是在todo示例中,所有数据都在一个文件中,但在wiki示例中有几个文件..我在view.py文件中添加了会话导入因为该视图本身正在生成Flash消息)。

我在做什么错?有什么建议么?

回答

6

您提供的代码仅仅是一个示例,当然您需要将它应用到正确的位置。在金字塔中,你应该(在简单的情况下)在你的代码中只有1个地方,你只需创建一个Configurator实例,在教程中它是在主函数中。除了使用make_wsgi_app创建WSGI应用程序外,Configurator本身不会执行任何操作。

因此,为了增加会议有,修改wiki2/src/views/tutorial/__init__.py如下:

from pyramid.config import Configurator 
from sqlalchemy import engine_from_config 
from pyramid.session import UnencryptedCookieSessionFactoryConfig 

from .models import DBSession 

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