Kuzunoha-NEのブログ

プログラミングなどの勉強をしてます

【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が入ります。いいねぇ。

下記の記事を参考にベストプラクティスなコンフを作ると良いのでは、と思います。というか、私はそうやってます。ありがとうございます。

qiita.com

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'] 

こんな感じで呼び出してテストしてあげましょう。実行したら何も起こらずにコマンドラインが返ってくると思います。(なんかあったらテスト落ちてるって意味です。)