2017-09-02 9 views
1

私はこの1つを含むフラスコパッケージを公開する:使用時にアプリケーションまたはデータベースに登録するFlaskライブラリを構成する方法は?

class Model(DB.Model): 
    __abstract__ = True 

    id = DB.Column(DB.Integer, primary_key=True) 
    created_at = DB.Column(DB.DateTime, default=datetime.utcnow, nullable=False) 
    updated_at = DB.Column(DB.DateTime, default=datetime.utcnow, onupdate=datetime.utcnow, nullable=False) 

    def __init__(self, **kwargs): 
     DB.Model.__init__(self, **kwargs) 

    @classmethod 
    def create(cls, **kwargs): 
     instance = cls(**kwargs) 
     return instance.save() 

    @classmethod 
    def delete_all(cls, **kwargs): 
     all_objs = cls.query.all() 
     for obj in all_objs: 
      obj.delete() 

が、ユーザーが自分のDBアイテムを持っています。私はフラスコでthis_package.init_app(myapp)のようなものをやっていることが分かりました。

しかし、それらのライブラリの作者はどのようにしてパッケージを構成したので、アプリ(または私の場合はdb)に登録すればいいのですか?

答えて

0

これまでは、DBオブジェクトをモデルファイルにインポートすると仮定して、DBを取得するゲッターを使用しました。これは完璧ではないですが、動作するはずです:

def get_model(DB): 

    class Model(DB.Model): 
     __abstract__ = True 

     id = DB.Column(DB.Integer, primary_key=True) 
     created_at = DB.Column(DB.DateTime, default=datetime.utcnow, nullable=False) 
     updated_at = DB.Column(DB.DateTime, default=datetime.utcnow, onupdate=datetime.utcnow, nullable=False) 

     def __init__(self, **kwargs): 
      DB.Model.__init__(self, **kwargs) 

     @classmethod 
     def create(cls, **kwargs): 
      instance = cls(**kwargs) 
      return instance.save() 

     @classmethod 
     def delete_all(cls): 
      all_objs = cls.query.all() 
      for obj in all_objs: 
       obj.delete() 

     @classmethod 
     def all(cls): 
      return cls.query.all() 

     @classmethod 
     def newest(cls, field_name): 
      return cls.query.order_by('{field_name} desc'.format(field_name=field_name)).limit(1) 

     @classmethod 
     def oldest(cls, field_name): 
      return cls.query.order_by('{field_name} asc'.format(field_name=field_name)).limit(1) 

     def update(self, commit=True, **kwargs): 
      for attr, value in kwargs.iteritems(): 
       setattr(self, attr, value) 
      return commit and self.save() or self 

     def save(self, commit=True): 
      DB.session.add(self) 
      if commit: 
       DB.session.commit() 
      return self 

     def delete(self, commit=True): 
      DB.session.delete(self) 
      return commit and DB.session.commit() 

    return Model 

その後、

from myapp.extensions import DB 
from flask_easy_model import get_model 

MyModel = get_model(DB) 

私はflask-cacheのコードを読んで、そのinit_app()は、これまでのところ、私の頭の上にあります。私はどんな答えにも感謝します

関連する問題