数学講師2852771 views
高校生物549842 views
ヒストリア284143 views
英語607877 views
高校化学2913383 views
りんご192546 views
MathPython491378 views
高校倫理1433119 views
小学算数1194618 views
小学社会308636 views
Help
Tools

English

Flask の Blueprint でアプリを分割する

アプリケーションが大きくなると、すべてのルートを1つのファイルに書くのは管理しづらくなる。Blueprint を使えば、アプリケーションを機能ごとに分割できる。

Blueprint の基本

Blueprint はルートやテンプレート、静的ファイルをグループ化する仕組みである。

# blueprints/auth.py
from flask import Blueprint

auth_bp = Blueprint('auth', __name__)

@auth_bp.route('/login')
def login():
    return 'Login page'

@auth_bp.route('/logout')
def logout():
    return 'Logout page'

Blueprint('auth', __name__) で Blueprint を作成する。第1引数は Blueprint の名前で、url_for などで使われる。

アプリケーションへの登録

作成した Blueprint はアプリケーションに登録する。

# app.py
from flask import Flask
from blueprints.auth import auth_bp

app = Flask(__name__)
app.register_blueprint(auth_bp)

これで /login/logout のルートが有効になる。

URL プレフィックスの設定

url_prefix を指定すると、Blueprint 内のすべてのルートに共通のプレフィックスが付く。

app.register_blueprint(auth_bp, url_prefix='/auth')

この場合、ルートは /auth/login/auth/logout になる。

ディレクトリ構成の例

Blueprint を使った典型的な構成は以下のとおり。

myapp/
├── app.py
├── blueprints/
│   ├── __init__.py
│   ├── auth.py
│   ├── api.py
│   └── admin.py
├── templates/
│   ├── auth/
│   │   └── login.html
│   └── admin/
│       └── dashboard.html
└── static/

Blueprint ごとにテンプレートディレクトリを分けると、さらに整理しやすくなる。

Blueprint 専用のテンプレートと静的ファイル

Blueprint にはテンプレートや静的ファイルのディレクトリを個別に設定できる。

auth_bp = Blueprint('auth', __name__,
                    template_folder='templates',
                    static_folder='static')

この設定により、Blueprint ディレクトリ内の templatesstatic が参照される。