1

ピラミッド フレームワークの認証アドオン/プラグインを作成しようとしています。プラグインには、ユーザーのログインやその他のデータを保存するデータベースが必要です。そのため、ユーザーが私のアドオンを使用する場合、データベースにはアドオンの特定のテーブル/モデルが含まれている必要があります。たとえば、このユーザーテーブル

class User(Base):
    __tablename__ = 'User'
    id = Column(Integer, primary_key=True)
    username = Column(Text())
    user_firstname = Column(Text())
    user_lastname = Column(Text())
    user_email = Column(Text())
    user_password = Column(Text())
    user_registrationdate = Column(DateTime())
    user_email_key = Column(Text())
    user_email_key_date_created = Column(DateTime())
    user_email_approved = Column(Boolean())
    user_email_sent = Column(Boolean())
    user_active_account = Column(Boolean())
    user_banned = Column(Boolean())
    user_banned_reason = Column(Text())

このモデルをユーザーのメインアプリに含める必要があります。以下に示すインクルードに何かを含める必要があると思います

def includeme(config):
    config.include('pyramid_mako')
    config.add_route('pyramid.admin', '/pyramid/admin')

    #static views
    config.add_static_view('assets', 'pyramidadmin:static/assets/')

    config.scan('pyramidadmin.views')

しかし、私は何をすべきかわからない。ベースと DBSession をアドオンからメイン アプリケーションのベースにマージして、ユーザーが../bin/initialize_myapp_dbmyaddon とメイン アプリからテーブルを実行するとすべて作成されるようにする方法はありますか?

4

2 に答える 2

0

次の方法を使用できます。

import sqlalchemy
import sqlalchemy.orm as orm
from zope.sqlalchemy import ZopeTransactionExtension
from sqlalchemy.ext.declarative import declarative_base

DBSession = None

def get_sa_base(engine):
    sabase = sqlalchemy.ext.declarative.declarative_base()
    sabase.metadata.reflect(engine)
    return sabase

def includeme(config):
    global DBSession
    engine = sqlalchemy.engine_from_config(config.registry.settings)
    if DBSession is None:
        DBSession = orm.scoped_session(
            orm.sessionmaker(extension=ZopeTransactionExtension()))
    DBSession.remove()
    DBSession.configure(bind=engine)
    Base = get_sa_base(engine)

    # example:
    Base.metadata.tables.values()

例はここにあります。

于 2013-11-15T20:53:23.737 に答える