高校倫理1434270 views
雑学1472774 views
中学理科1627080 views
中学英語809228 views
LaTeX957931 views
高校日本史189949 views
小学算数1196005 views
MathPython492451 views
小学社会308820 views
ヒストリア285028 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 が参照される。