2017-03-07 6 views
0

OK、Flaskアプリケーションで少し難解なことをしようとしています。フラスコアプリケーションの設定をmodels.py内で呼び出す

私は、構成ファイルの情報に基づいてモデル構造内にいくつかの条件付きロジックが必要です。

現在

私は私のフラスコアプリケーションを呼び出し、設定オブジェクトは、次のように指定されています。

app = create_app('swarm.settings.DevConfig') 

デシベルオブジェクトがmodels.pyに作成されます。

from flask_sqlalchemy import SQLAlchemy 

db = SQLAlchemy() 

class MyClass(db.Model): 
    ... 

私がモデルをしたいと思います。 pyを使用して、さまざまなORMおよびOGM(SQLAlchemyおよびpy2neoに限定されない)に対応し、FlaskアプリケーションをSQL/Graphに依存しないように開発することができます。

if __SOME_CONFIG__['db_mapper'] = 'SQLAlchemy': 
    from flask_sqlalchemy import SQLAlchemy 
    db = SQLAlchemy() 
    class MapperModel(db.Model): 
     ... 
elif __SOME_CONFIG__['db_mapper'] = 'Py2Neo': 

    from py2neo import Graph, Node, Relation 
    db = Graph() 
    class MapperModel(py2neo.Node): 
     ... 

class MyClass(MapperModel): 
    ... 

私は、コードがアプリケーションのオブジェクトを認識している前に、私は私のdbオブジェクトを作成していますので、これを達成するためにcurrent_appを使用する方法を見ることはできません。

models.pyから現在の設定オブジェクトをロードする簡単な方法はありますか?私はちょうどmodels.pyの設定を、アプリケーションの現在の設定オブジェクトを参照しないで別のファイルからロードする必要がありますか?

答えて

0

dbオブジェクトを返す関数を作成し、あなたがフラスコアプリケーションのインスタンスを作成するとき、このオブジェクトを初期化:

app = create_app(...) 
db = create_dbobject('someconfig') 

def create_dbobject(someconfig): 
    if someconfig == 'Py2Neo': 
     return Py2Neo() 
    #default to sqlchemy 
    return SQLAlchemy() 

だからもう、あなたは拡張の初期化を心配する必要はありません。また、アプリが存在する場所で拡張機能の初期化を維持することもできます。

関連する問題