はじめに
Falskは非常にシンプルなフレームワークな故に、ファイルやディレクトの配置に悩めます
機能のひとつBlueprintを利用すれば、URLルーティングやビジネスロジックを分けられるので、ここで整理します
- Flaskでルーティングを整理したい。ルーティング用のファイルにまとめたい。
- アプリケーションを分割したい。
- Laravelのweb.phpのようにルーティング用のファイルとアプリ(ビジネスロジック)を分割したい
- Flask2の新機能であるネストも試してみる
以前の続き
EC2にPython/Flask2を構築
Flask2でGET/POSTの値を取得する
Falskの公式ドキュメント
https://flask.palletsprojects.com/en/2.0.x/
準備
起動用のファイルを作成。今回はrunコマンドではなく、app.run()で起動
from flask import Flask, Blueprint
from route import web
app = Flask(__name__)
app.register_blueprint(web.bp)
if __name__ == "__main__":
app.run()
register_blueprintで別ファイルのURLのルーティングを記述しているファイルを呼び出し
下のweb.pyファイルを作成してます
web.bpとあるのは、web.pyのbp変数をセットしています
web.pyにLaravelのweb.phpのようにURLのルーティングをまとめます
/yamada
from flask import Blueprint
from models import Yamada
bp = Blueprint('web', __name__, url_prefix="/yamada")
yamada = Yamada.Yamada()
@bp.get('/name')
def name():
return yamada.name()
@bp.get('/age')
def age():
return yamada.age()
@bp.get('/weight')
def weight():
return yamada.weight()
yamadaクラスを用意して、そこにビジネスロジックを書くようにしてます
名前や年齢などを返すようにしてますね
class Yamada:
def name(self):
return "山田です"
def age(self):
return "20歳"
def weight(self):
return "60Kg"
では実行してみます
python3 app_bp.py
Flask実行
curlで呼び出し
curl http://localhost:5000/yamada/name
山田です
表示されましたね
Blueprintのネストもやってみます
個人的にはルーティングの記述がわかりにくくなってしまいそうで使いたくないのですが
Githubなんかを読んでると需要があるようで待ち焦がれた機能のようです
ネストするルーティングファイルを用意します
from flask import Blueprint
from models import Tarou
bp = Blueprint('web_sub', __name__, url_prefix="/tarou")
tarou = Tarou.Tarou()
@bp.get('/name')
def name():
return tarou.name()
@bp.get('/age')
def age():
return tarou.age()
@bp.get('/weight')
def weight():
return tarou.weight()
web.pyにネスト用のweb_sub.pyを呼び出すようにします
from route import web_sub
bp.register_blueprint(web_sub.bp)
ビジネスロジック用のtarou.pyも用意
class Tarou:
def name(self):
return "山田太郎です"
def age(self):
return "24歳"
def weight(self):
return "100Kg"
curlで呼び出し
curl http://localhost:5000/yamada/tarou/name
山田太郎です
yamadaにtarouがネストされて表示されましたね
まとめ
- 一つのファイルが大きくなりがちなのをBlueprintを利用すれば、ファイル・ディレクトが整理できます
- Falskの公式ドキュメントは分かりにくい
今回のサンプルコードはGitHubにアップしております
github/flask2_demo