akkietech’s diary

セキュリティ関連メインの自分用メモ書き。twitter: @akkietech

1/29 FlaskでBlueprint使う

■Blueprintが使ってみたい

Flask公式のチュートリアルではBlueprintが使われていたが
開発環境での例だったので、今回は自作の本番環境で
Blueprintが使いたいと思った

DBと連携するための下準備でもある
まさしくBluprint

・__init__.pyは変わらず使う
・Blueprintとなるファイルはviews.py
・initとviewsは同じフォルダに配置
 (viewsを1つ下のフォルダに置く方法ができなかった...)

__init__.py

from flask import Flask
app = Flask(__name__)

from . import views
app.register_blueprint(views.bp)

if __name__ == "__main__":
	app.run()

views.py

from flask import render_template, Blueprint

bp = Blueprint('bp', __name__)

@bp.route("/")
def index():
	return render_template('index.html')

すごい簡潔にやるとこんな感じ


例えばlogin、logoutの処理を定義するときに
redirect(url_for())を使う場合は、引数に渡すメソッド名に注意が必要

@bp.route("/logout/")
def logout():
	session.clear()
	return redirect(url_for('bp.index'))

またtemplatesフォルダ配下のhtmlファイルも同様

<h1>Top Page</h1>

<h2><a href="{{ url_for('bp.index') }}">Top</a></h2>
<h2><a href="{{ url_for('bp.logout') }}">Logout</a></h2>

initiファイルでやってたときは'index'として渡せばよかったけど
Bluprint使うとなると'bp.index'として渡す必要がある


デバッグ使いながらなんとかBlueprintを使った環境が完成
次はようやくDBとの連携に移れる