↓ メインコンテンツへスキップ

ルーティングと Blueprint によるモジュール分割

概要
#

アプリケーションの規模拡大に伴うコード肥大化を防ぐための Blueprint によるモジュール分割、GET/POST/JSON 等のリクエストデータ取得方法、Jinja2 テンプレートの継承手法についてのまとめ。

参考ブログ記事
#


1. Blueprint による機能分割
#

機能ごと(例: 認証、ブログ、管理画面)に Blueprint を定義し、独立したルーティングとビューを管理する。

Blueprint の定義例 (app/views/auth.py)
#

 1from flask import Blueprint, render_template, request, redirect, url_for
 2
 3bp = Blueprint("auth", __name__, url_prefix="/auth")
 4
 5@bp.route("/login", methods=["GET", "POST"])
 6def login():
 7    if request.method == "POST":
 8        # ログイン処理
 9        pass
10    return render_template("auth/login.html")

アプリケーションへの登録 (app/__init__.py)
#

1from app.views import auth
2
3def create_app():
4    app = Flask(__name__)
5    app.register_blueprint(auth.bp)
6    return app

2. リクエストパラメータの受け取り
#

データ種別取得方法例
URL パスパラメータルーティングパラメータ@bp.route("/users/<int:user_id>")
クエリパラメータ (GET)request.args.get("key")/?page=1
フォームデータ (POST)request.form.get("key")<form method="POST">
JSON ボディrequest.get_json()API リクエスト

3. Jinja2 テンプレートとレイアウト継承
#

base.html を作成し、各テンプレートで {% extends "base.html" %} を使用して共通レイアウトを継承する。 url_for('auth.login') のように [blueprint_name].[endpoint] 形式で URL を逆引きする。

ここに掲載する記事はまだありません。