HOWTO · Flask

Flask プロジェクトの構造

この説明では、Flask と Python のブループリント アプローチを利用して大きな Flask アプリケーションを構築する方法を学びます。

このページの内容

この説明では、Flask と Python のブループリント アプローチを利用して大きな Flask アプリケーションを構築する方法を学びます。

Flask と Python のブループリント アプローチを利用して Big Flask アプリケーションを構築する

Flask のドキュメントに Flask の設計図について書かれていることはわかっています。 それでも、Flask のドキュメントを読んだだけでは、初心者が Flask アプリケーションを構築する方法を理解するのが難しい場合があります。

そこで、簡単な言葉を使って分解し、Flask Blueprint クラスを使用して Flask アプリケーションを構築する方法を説明したいと思います。

作業を開始するには、次のコマンドを使用して仮想環境を作成し、Flask をインストールします。 仮想環境を作成したら、これを有効にしてFlaskパッケージをインストールします。

python -m venv our_venv
.\our_venv\Scripts\Activate.ps1
pip install flask

ブループリントを使用すると、Flask アプリケーションのさまざまなインスタンスを作成し、さまざまなパッケージでコードの一部を再利用できるため、常にゼロから作成する必要はありません。

まず、app というディレクトリを作成します。 root ディレクトリ内に、run.py というファイルを作成します。 app ディレクトリ内に、この app ディレクトリを作成して Python でパッケージを作成し、__init__.py ファイルを作成します。

次に進み、__init__.py ファイル内で Flask をインポートし、アプリケーションを作成する関数 create_app() を定義します。 Flask のインスタンスを作成し、app=Flask(__name__) のように app 変数に格納してから、このオブジェクトを返します。

ここで、アプリから create_app 関数をインポートする必要があり、この run.py ファイルを実行するときにアプリケーションを実行したいと考えています。 これを行うには、次の構文を使用します。

アプリケーションを作成するとき、連携してアプリケーションを作成するさまざまなコンポーネントを作成します。 app ディレクトリ内に作成できます。 app ディレクトリ内に main というディレクトリを作成し、この main ディレクトリ内に __init__.py ファイルを作成してパッケージにします。

routes.py ファイルを作成し、このファイル内で Flask モジュールから Blueprint クラスをインポートし、ブループリントに main という名前を付けて __name__ に渡します。

基本的に、Flask クラスを使用して Flask アプリケーションをインスタンス化するのと同様に、単純な Flask アプリケーションを作成する方法です。

main = Blueprint("main", __name__)

次に、ルーティング ページのルートを作成し、Main_Page() 関数を定義して、ページを返します。

app ディレクトリ内にある __init__.py ファイル内で、ブループリントを登録する必要があるため、ブループリント インスタンスを作成した app.main.routes から main をインポートします。 次に、app.register_blueprint() を使用して、ブループリント、つまり main を登録します。

同様に、通常の Flask アプリケーションにテンプレートを追加すると、templates というディレクトリを作成でき、このディレクトリ内に HTML ファイルを生成できます。 また、Flask アプリケーションの構成を制御することもできます。これは非常に簡単です。

root ディレクトリ内に config.py ファイルを作成できます。このファイル内に Config というクラスを作成できます。このクラスには、TESTING と DEBUG が False に設定されます。

ここで、Development と呼ばれる別のクラスを作成することもできます。このクラスは、Config を継承し、DEBUG を True に上書きします。 Config を継承する TESTING というクラスをもう 1つ定義します。 TESTING プロパティは True に等しくなります。

多くの構成を持つことができますが、構成を使用して blueprints アプリケーションを構成する方法を理解できるように、これを単純にしたいだけです。

次に、ディクショナリとなる config という変数を作成します。このディクショナリには、これらのキーの値として Development および TESTING クラスが含まれます。

class Config(object):
    TESTING = False
    DEBUG = False


class Development(Config):
    DEBUG = True


class TESTING(Config):
    TESTING = True


config = {"development": Development, "testing": TESTING}

__init__.py ファイルに戻り、Config ファイルから config 辞書をインポートします。 create_app() 関数内で app_config を渡し、この引数に開発を渡す必要があります。

ここで、app.config.from_object(config[app_config]) を使用して Flask アプリを渡し、このコードを関数ブロック内に記述する必要があります。 次に、.env ファイルと変数をセットアップするのに便利な dotenv パッケージをインストールします。それらはアプリケーション全体で使用でき、簡単に切り替えることができるからです。

pip install python-dotenv

次に、.env ファイルも作成し、このファイル内で、本番環境から開発環境への Flask 環境を設定します。 これをコード FLASK_ENV=development のように記述して保存するだけです。

必要な数のパッケージを作成できるため、app ディレクトリ内に移動して auth パッケージを作成できます。このパッケージの代わりに、ログインとログアウトなどを行うことができます。 static フォルダーを作成し、通常の Flask アプリと同様に、静的アサートをこのディレクトリ内に保持することもできます。

ここで、最初に作成したこの run.py ファイルを実行します。 現在、環境は本番環境ではなく開発モードであり、アプリは正常に動作していることがわかります。

Flask プロジェクト構造 - 出力 1

このブループリント アプローチは、アプリケーションを構造化してより洗練されたものにし、より広範なアプリケーションを構成するのに役立ちます。

run.py ファイルのコード:

from app import create_app

if __name__ == "__main__":
    create_app().run(debug=True)

__init__.py ファイルのコード:

from flask import Flask
from config import config


def create_app(app_config="development"):
    app = Flask(__name__)
    app.config.from_object(config[app_config])
    from app.main.routes import main

    app.register_blueprint(main)
    return app

routes.py ファイルのコード:

from flask import Blueprint

main = Blueprint("main", __name__)


@main.route("/", methods=["GET"])
def Main_Page():
    return "Hi there!"

Flask プロジェクトの構造は次のようになります。

Flask プロジェクト構造 - 出力 2