Flaskの設定ファイルの書き方
Flaskアプリケーションでは、様々な設定を管理する必要があります。これらの設定は主に2つの方法で行うことができます。
方法1: `from_object` を使用する
まず、プロジェクトのルートディレクトリに `settings.py` という設定ファイルを作成します。このファイル内で、異なる環境(開発、本番、テスト)用の設定クラスを定義します。
class 基本設定(object):
DEBUG = True
SECRET_KEY = "fsdajklfjdsalk1654356"
class 本番環境設定(基本設定):
DEBUG = False
class 開発環境設定(基本設定):
pass
class テスト環境設定(基本設定):
pass
次に、メインのアプリケーションファイル(例: `app.py`)でこの設定を読み込みます。
from flask import Flask
アプリケーションインスタンス = Flask(__name__)
アプリケーションインスタンス.config.from_object("settings.開発環境設定")
@アプリケーションインスタンス.route("/", methods=["GET", "POST"])
def ホームページ():
return "ホームページ"
if __name__ == '__main__':
アプリケーションインスタンス.run()
from_object()メソッドは、指定されたクラスのオブジェクトを設定としてアプリケーションに読み込みます。内部的には、Pythonのimportlibモジュールを利用してクラスを動的にインポートします。設定ファイルは通常、プロジェクトのルートディレクトリに配置します。
方法2: アプリケーションファイル内で直接設定を記述する
設定を別ファイルに分ける代わりに、アプリケーションファイル内で直接設定を定義することも可能です。
アプリケーションインスタンス = Flask(__name__)
# 設定を直接記述
アプリケーションインスタンス.config.update({
'DEBUG': True,
})
@アプリケーションインスタンス.route('/hello')
def hello_world():
return "hello world"
if __name__ == '__main__':
アプリケーションインスタンス.run()
主な設定項目
Flaskでよく使われる設定項目は以下の通りです。
{
'DEBUG': get_debug_flag(default=False), # デバッグモードの有効化
'TESTING': False, # テストモードの有効化
'SQLALCHEMY_ECHO' False, # コンソールへのSQL出力
'SECRET_KEY': None, # 秘密鍵の設定
'PERMANENT_SESSION_LIFETIME': timedelta(days=14), # セッションの有効期間
'PROPAGATE_EXCEPTIONS': None,
'PRESERVE_CONTEXT_ON_EXCEPTION': None,
'USE_X_SENDFILE': False,
'LOGGER_NAME': None,
'LOGGER_HANDLER_POLICY': 'always',
'SERVER_NAME': None,
'APPLICATION_ROOT': None,
'SESSION_COOKIE_NAME': 'session',
'SESSION_COOKIE_DOMAIN': None,
'SESSION_COOKIE_PATH': None,
'SESSION_COOKIE_HTTPONLY': True,
'SESSION_COOKIE_SECURE': False,
'SESSION_REFRESH_EACH_REQUEST': True,
'MAX_CONTENT_LENGTH': None,
'SEND_FILE_MAX_AGE_DEFAULT': timedelta(hours=12),
'TRAP_BAD_REQUEST_ERRORS': False,
'TRAP_HTTP_EXCEPTIONS': False,
'EXPLAIN_TEMPLATE_LOADING': False,
'PREFERRED_URL_SCHEME': 'http',
'JSON_AS_ASCII': True,
'JSON_SORT_KEYS': True,
'JSONIFY_PRETTYPRINT_REGULAR': True,
'JSONIFY_MIMETYPE': 'application/json',
'TEMPLATES_AUTO_RELOAD': None,
}