Flask Blueprint の使い方

スポンサーリンク

Blueprint とは

Flask における Blueprint とは、アプリケーションの機能を複数のファイル (モジュール) に分割する方法です。

ソースコードが長すぎる場合に、機能ごとにファイルを分割し管理しやすくするために利用します。

なお、Flask について順を追って学びたい場合は以下の記事をご覧ください

スポンサーリンク

Blueprint の使い方

Blueprint は flask をインストールすることで利用可能です。

pip3 install flask

次に、Blueprint の使い方を説明するために、以下の2つを比較しながら紹介します。

分割前のアプリケーション

まずは分割前のアプリケーションを作成します。

vim app.py
from flask import Flask

app = Flask(__name__)

@app.route('/')
def root():
    return 'Hello world'

@app.route('/hoge')
def hoge():
    return 'hoge'

if __name__ == '__main__':
    app.run()
flask run

動作確認をします。

curl localhost:5000/
Hello world
curl localhost:5000/hoge
hoge

分割後のアプリケーション

次に分割後のアプリケーションを作成します。

今回は先程の app.py にある2つの機能「@app.route('/')」と「@app.route('/hoge')」を、2つのモジュール (ファイル) に分割します。

vim app.py
from flask import Flask
# app2.py にある bp 変数を import
from app2 import bp

app = Flask(__name__)
# import した bp 変数(Blueprint オブジェクト)を登録
app.register_blueprint(bp)

@app.route('/')
def root():
    return 'Hello world'

if __name__ == '__main__':
    app.run()
vim app2.py
from flask import Blueprint

# Blueprint を作成
bp = Blueprint('app2', __name__)

# 先程 app.py にあった機能「@app.route('/hoge')」を app2.py に移動
@bp.route('/hoge')
def hoge():
    return 'hoge'

classflask.Blueprint(name, import_name,....
name (str) -- The name of the blueprint. Will be prepended to each endpoint name.

import_name (str) -- The name of the blueprint package, usually __name__. This helps locate the root_path for the blueprint.

https://msiz07-flask-docs-ja.readthedocs.io/ja/latest/api.html#blueprint-objects
flask run

動作確認をします。

curl localhost:5000/
Hello world
curl localhost:5000/hoge
hoge

2つのモジュール (ファイル) に分割して、先程と同様の結果を得ることができました。

スポンサーリンク

参考サイト

Blueprintを使ったアプリケーションのモジュール化 — Flask Documentation (2.2.x)
はじめてのFlask導入〜Blueprint適用 - Qiita
タイトルのことをなるべく簡単に行ってみます。Blueprintを使用すると、アプリケーションの機能を分割して実装することができます。肥大化したプロジェクトを整理するための手段として、公式でもBl…