0

私はこの 1 週間、Flask をいじっています。楽しみのために、私は以下を実装しようとしています。はい、私はそれが非常に Django 風であり、おそらくマイクロフレームワークには不適切であることを知っています。

これが私がやろうとしていることのサンプルです:

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

質問: DB を機能させ、設定と app.py の一部として「アプリ」をロードすることは可能ですか?

4

1 に答える 1

1

他の処理が行われる前に、設定が最初に読み込まれます。ifリクエストに応じてDBを切り替えたい場合は、これをモデル/ビューロジックに入れる必要があります。

ドキュメントによると(設定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)

ただし、これが本番用の 1 つの方法と開発用の別の方法で DB にアクセスすることを意味する場合は、次のようなものです。

import os

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

次に、if設定の が適切です。

于 2013-03-07T12:33:37.243 に答える