2013-03-07 52 views
0

過去一週我一直在使用Flask。爲了好玩,我試圖實現以下內容。是的,我知道這是非常Django式的,可能不適合微觀框架。Flask的settings/config文件中模塊,常量和數據庫的自定義

這裏是我想要做的一個樣本:

STATIC_PATH = '/static/' 
TEMPLATE_URL = '/template/' 
DATABASES = { 
    'DEBUG': { 
    'ENGINE': 'bla.sqlite3', 
    'NAME': 'koopics.db' 
    }, 
    'DEMO': { 
    'ENGINE': 'bla.sqlite3', 
    'NAME': 'somedb' 
    }, 
    'PRODUCTION': { 
    'ENGINE': 'bla.psycopg2', 
    'NAME': 'somedb', 
    'host': 'host', 
    'username': 'host', 
    'password': 'host', 
    }, 
} 

MODE = 'Demo' 

#TODO: put an IF statement here to provide the connection mechanism for the db 
#  depending on what is required  

INSTALLED_APPS = [ 
    'Flask-SQLAlchemy', 
    'Flask-DebugToolbar', 
    'Flask-Mail', 
    'Flask-Cache', 
    'Flask-Celery', 
    'my_custom_module', 
] 

我現在有自己的文件夾中定義與__init__.py我的自定義應用程序。

問題:是否可以讓數據庫工作,並將「應用程序」作爲設置和app.py的一部分加載?

+0

你忘記說「需要什麼」... – danodonovan 2013-03-07 12:30:19

回答

1

在處理其他任何事情之前先加載您的設置。如果要根據請求切換DB,則需要將此if置於模型/視圖邏輯中。

按照docs(您的設置看起來更像django比普通flask,所以我不知道這會甚至工作),可以使用__bind_key__在你的模型該模型定向到一個特定的DB

# settings.py 
SQLALCHEMY_BINDS = { 
    'DEBUG': 'sqlite:////path/to/koopics.db', 
    'DEMO': 'sqlite:////path/to/somedb.db' 
} 

和你的模型

# model 
class DebugModel(db.Model): 
    __bind_key__ = 'DEBUG' 
    id = db.Column(db.Integer, primary_key=True) 
    debug_value = db.Column(db.String(80), unique=True) 

然而,如果你的意思是你想用它來訪問的說,生產DB方式之一,另一個用於發展,事遂所願

import os 

if os.environ('MACHINE_NAME', '') == 'PRODUCTION': 
    # set up production db 
else: 
    # set up development db 

然後if在您的設置是適當的。

相關問題