2013-11-15 2 views
1

피라미드 프레임 워크 인증 addon/Plugin을 만들려고합니다. 플러그인에는 사용자 로그인 및 기타 데이터를 저장하는 데이터베이스가 있어야하므로 사용자가 내 추가 기능을 사용하는 경우 데이터베이스에 추가 기능의 특정 테이블/모델이 있어야합니다. 예를 들어피라미드 프레임 워크 (메인 애플리케이션에 애드온의 models.py 포함)

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') 

아래에 표시 내 includeme에서 뭔가를 포함해야하지만 난 아무 생각이 무엇인지 할 것. 기본 응용 프로그램의 기본에 내 addon에서 DBSession과 Base를 병합 할 수있는 방법이 있습니까? ../bin/initialize_myapp_db myaddon의 테이블과 기본 응용 프로그램 모두가 모두 만들어 지도록하려면?

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() 

here을 찾을 수 있습니다

답변

0

는 다음과 같은 방법을 사용할 수 있습니다.

0

나 자신에게도 똑같은 문제가있었습니다. 나는 여전히 내 물건을 더 플러그 형으로하려고 노력하고 있지만, 혼합 된 결과를 가지고있다. 이 문제를 해결하는 방법은 각 선언적 기본 클래스를 동일한 엔진으로 바인딩하는 것이 었습니다. 내 일반 scaffolding에서이 작업을 수행합니다.

# create db engine 
engine = engine_from_config(settings, 'sqlalchemy.') 
# setup db.sessionmaker 
settings['db.sessionmaker'] = DBSession 
# bind session to engine 
DBSession.configure(bind=engine) 
# bind objects to engine 
Base.metadata.bind = engine 
from trumpet.models.base import Base as TrumpetBase 
TrumpetBase.metadata.bind = engine 
if settings.get('db.populate', 'False') == 'True': 
    from mslemon.models.main import make_test_data 
    import mslemon.models.misslemon 
    Base.metadata.create_all(engine) 
    TrumpetBase.metadata.create_all(engine) 
    #initialize_sql(engine) 
관련 문제