この記事は何か
Flaskを使用してアプリケーションを作る際、コントローラーが冗長になってしまう場合には、Blueprintを用いてcontrollerの分割を行うことができる。
Blueprintを用いて分割したControllerを跨いだurl_forの使用方法についての記事
本題
app.pyに書いていた処理をlines_controller.pyとsessions_controller.pyにBlueprintを用いて分割したとする。
app.py
# coding: utf-8
from flask import Flask
from .controllers import lines_controller
from .controllers import sessions_controller
# .をつけるのはモジュールと区別するため
def create_app():
app = Flask(__name__)
app.register_blueprint(lines_controller.lines)
app.register_blueprint(sessions_controller.sessions)
init_db(app)
return app
app = create_app()
lines_controller.py
from flask import Blueprint
lines = Blueprint('lines', __name__)
@lines.route("/lines_callback", methods=['POST'])
def lines_callback():
# 様々な処理
redirect_uri = url_for('sessions.sr_callback', _external=True)
sessions_controller.py
from flask import Blueprint
sessions = Blueprint('sessions', __name__)
@sessions.route("/callback", methods=['GET'])
def callback():
# 様々な処理
redirect_uri = url_for('sessions.sr_callback', _external=True)
このようにBlueprintで分割したControllerにおいて、他のcontrollerのメソッドへのuriをurl_forで呼び出したい場合には、上記のように
# url_for('sessions.sr_callback')
url_for('[そのメソッドが所属するblueprint object名].[メソッド名]')
と書く。
参考