LoginSignup
1
5

More than 5 years have passed since last update.

【Flask】Blueprintで分割したControllerを跨いでのurl_for()

Posted at

この記事は何か

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名].[メソッド名]')

と書く。

参考

1
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
5