Flask プロジェクトの構造

Salman Mehmood 2023年10月10日
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 というクラスを作成できます。このクラスには、TESTINGDEBUGFalse に設定されます。

ここで、Development と呼ばれる別のクラスを作成することもできます。このクラスは、Config を継承し、DEBUGTrue に上書きします。 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

著者: Salman Mehmood
Salman Mehmood avatar Salman Mehmood avatar

Hello! I am Salman Bin Mehmood(Baum), a software developer and I help organizations, address complex problems. My expertise lies within back-end, data science and machine learning. I am a lifelong learner, currently working on metaverse, and enrolled in a course building an AI application with python. I love solving problems and developing bug-free software for people. I write content related to python and hot Technologies.

LinkedIn