
目標
- Flaskのルーティングについて概要と基本を理解する。
Flaskのルーティング
Flaskのルーティング
Flaskのルーティングは、特定のURLに対して処理を紐付ける仕組みです。ルーティングを行う方法には、以下のものがあります。
- @app.route() デコレーターを利用する方法
- シンプルなルーティング
- パスパラメータ(シンプルな利用)
- パスパラメータ(型指定)
- パスパラメータ(HTTPメソッド(GET、POSTなど)指定)
- リダイレクト
- Blueprintを利用する方法
- アプリのルートを分割・モジュール化
- app.register_blueprint()で登録
ルーティングの利用パターン
@app.route() デコレーターを利用する方法
シンプルなルーティング
@app.route() デコレーターの引数にルートを指定します。
from flask import Flask
app = Flask(__name__)
@app.route('/')
def index():
return "「/」のリクエストが来たらindex関数を実行しています。"
if __name__ == '__main__':
app.run(debug=True)
http://127.0.0.1:5000/ にアクセスすると「/」のリクエストが来たらindex関数を実行しています。が表示されます。
パスパラメータ
URLの一部を変数として扱い、リクエストごとに異なる値を取得できます。
@app.route(‘/user/<username>’) の <username> 部分はプレースホルダーであり、リクエスト時に渡された値が username 変数に格納されます。
from flask import Flask
app = Flask(__name__)
@app.route('/user/<username>')
def show_user(username):
return f"User: {username}"
if __name__ == '__main__':
app.run(debug=True)
http://127.0.0.1:5000/user/howahowa にアクセスすると User: howahowa が表示されます。
パスパラメータ(型指定)
URLの一部を変数として扱い、リクエストごとに異なる値を取得できます。この時に変数に結び付く値の型を指定します。
下のプログラム:@app.route(‘/user/<string: username>’) の <string: username>
from flask import Flask
app = Flask(__name__)
@app.route('/user/<string: username>')
def show_user(username):
return f"User: {username}"
if __name__ == '__main__':
app.run(debug=True)
http://127.0.0.1:5000/user/1234 にアクセスすると User: 1234 が表示されます。(パラメータは数値も文字列として受け取ることができるため、この場合、エラーにはなりません。)
http://127.0.0.1:5000/user/howahowa にアクセスすると User: howahowa が表示されます。
パスパラメータ(HTTPメソッド指定)
デフォルトでは GET のみを利用しますが、methods を指定して POST なども利用することができます。
from flask import Flask
app = Flask(__name__)
@app.route('/request', methods=['GET', 'POST'])
def handle_request():
return "「/request」のリクエストが来たらGETまたはPOSTのmethodを受け付けます。"
if __name__ == '__main__':
app.run(debug=True)
リダイレクト
redirect() を利用するとリダイレクトを行わせることができます。redirect() を利用するには redirect を import します。
from flask import Flask, redirect
app = Flask(__name__)
@app.route('/')
def index():
return redirect('/next')
@app.route('/next')
def next():
return "このページはリダイレクト先です。"
if __name__ == '__main__':
app.run(debug=True)
http://127.0.0.1:5000/ にアクセスするとhttp://127.0.0.1:5000/next にリダイレクトされ このページはリダイレクト先です。が表示されます。
Blueprintを利用する方法
大規模なアプリでは Blueprint を使ってルートを分割できます。(アプリの分割を行わせる機能)
# Blueprint をインポートして、新しいルートのグループを作成できるようにします。
from flask import Flask, Blueprint
app = Flask(__name__)
# Blueprint('user', __name__) で user_bp_obj という名前の Blueprintオブジェクト を作成します。
user_bp_obj = Blueprint('user', __name__)
# /howahowaというルートを user_bp に定義します。
@user_bp_obj.route('/howahowa')
def howahowa():
return "User howahowa"
# app.register_blueprint() を使って、user_bp_obj を Flaskアプリに登録します。
# rl_prefix='/user' を指定し、Blueprintのルートを /user/howahowaとしています。
app.register_blueprint(user_bp_obj, url_prefix='/user')
if __name__ == '__main__':
app.run(debug=True)
Flaskアプリが動作すると、Blueprint に登録されたルート /profile が /user/howahowa として有効になります。起動後、http://localhost:5000/user/howahowa にアクセスすると “User howahowa” と表示されます。
今回は以上になります。

ブックマークのすすめ
「ほわほわぶろぐ」を常に検索するのが面倒だという方はブックマークをお勧めします。ブックマークの設定は別記事にて掲載しています。

