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 ディレクトリ内の templates と static が参照される。












