【Python】Flaskでcreate_app関数を作って使う
こんばんは、葛の葉です。
今回はFlaskで調べものをしているとよく見かけるcreate_app
関数を使ってみます。
環境
Python 3.6.6
Flask 1.0.2
ディレクトリ構成はこちら
カレントディレクトリ ├── app_factroy.py ├── app.py └── test_app.py
create_appを作る
# app_factroy.py from flask import Flask def create_app(config_mode='test'): app = Flask(__name__) if config_mode == 'test': app.config['DEBUG'] = True app.config['SQL_ADDRESS'] = '127.0.0.1' else: app.config['DEBUG'] = False app.config['SQL_ADDRESS'] = '69.196.1.1' return app
create_app
関数はFlask(__name__)
のインスタンスであるapp
に様々なコンフィグを与え、最終的にそのapp
を返却します。create_app
関数の引数config_mode
には開発環境か、テスト環境か、本番環境か、といった環境のステータスを渡してあげます。
create_appを呼び出す
# app.py from app_factroy import create_app app = create_app('dev') # import os # app = create_app(os.getenv('FLASK_CONFIGURE_MODE')) # 以下何らかの処理 if __name__ == __main__: app.run()
create_app
関数を呼び出して、引数に環境情報を与えます。返り値をapp
変数に代入します。そうしてapp.run()
してあげれば、Flaskは実行されます。
また、os.getenv
を使って環境変数から環境情報を与えるのもありかなぁと思います。今回のコメントアウト部分がそれです。FLASK_CONFIGURE_MODE
という環境変数内にtest
とか入れておくと、create_appの引数にtest
が入ります。いいねぇ。
下記の記事を参考にベストプラクティスなコンフを作ると良いのでは、と思います。というか、私はそうやってます。ありがとうございます。
create_appでtestする
# test_app.py from app_factroy import create_app app = create_app('test') assert '127.0.0.1' == app.config['SQL_ADDRESS']
こんな感じで呼び出してテストしてあげましょう。実行したら何も起こらずにコマンドラインが返ってくると思います。(なんかあったらテスト落ちてるって意味です。)