アプリケーションが大きくなると、すべてのルートを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 を使った典型的な構成は以下のとおり。
Blueprint ごとにテンプレートディレクトリを分けると、さらに整理しやすくなる。
Blueprint 専用のテンプレートと静的ファイル
Blueprint にはテンプレートや静的ファイルのディレクトリを個別に設定できる。
auth_bp = Blueprint('auth', __name__,
template_folder='templates',
static_folder='static')
この設定により、Blueprint ディレクトリ内の templates と static が参照される。