3

私は Pyramid を学習しようとしていますが、メッセージ フラッシュを機能させるのに問題があります。私はまったくの初心者ですが、ドキュメントを読み、チュートリアルを行いました。

wikiの作成に関するチュートリアルを行いました(チュートリアルはこちらコードはこちら)。それはうまく機能し、非常に簡単だったので、私が行ったtodoリストチュートリアルで見たフラッシュメッセージを適用しようとすることにしました(チュートリアルはこちら、完全なコードはページの下部にある単一のファイルにあります)。基本的にtodoリストが作成されると、「新しいタスクが正常に追加されました!」というメッセージとともにページが更新されます。誰かが 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!')しかし、毎回エラーが発生します: Pyramid error: AttributeError: No session factory registered

これが私の機能です(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),
        )

(注:私が間違っていると思うことの1つは、todoの例ではすべてのデータが1つのファイルにありますが、wikiの例ではいくつかのファイルがあります.view.pyファイルにセッションインポートを追加したためですフラッシュメッセージはビュー自体によって生成されています)。

私は何を間違っていますか?助言がありますか?

4

1 に答える 1

6

あなたが提供したコードは単なる例です。もちろん、正しい場所に適用する必要があります。Pyramid では (単純なケースでは ;) コード内でインスタンスを 1 つだけ作成する場所を 1 つだけ持つ必要がありますConfigurator。チュートリアルでは、それはメイン関数にあります。を使用して WSGI アプリケーションを作成するConfiguratorことを除いて、 は単独では何もしませんmake_wsgi_app

したがって、そこにセッションを追加するには、次のように変更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)
    ...
于 2012-06-25T05:34:49.833 に答える