この記事では
- Flaskで簡単なルーティングをする方法
- 値を渡す動的なルーティング、値の種類
- 複数の値を渡す動的なルーティング
- HTTPメソッド(GET,POST,PUT)に応じたルーティングの方法
- 複数のURLに対して同一の関数を対応させるルーティング
について、必要なだけ、詳細に説明します。
簡単なルーティングをする方法
ルーティングというのは、URLに応じて、実行されるページを変える機能のことを言う。
例えば、
- http://〇〇〇.〇〇〇/item_list => 商品の一覧画面を表示する
- http://〇〇〇.〇〇〇/item_detail => 商品の詳細画面を表示する
のように、Flaskで実行する処理に応じて、表示される画面を変えたい場合に、ルーティング機能は用いられる。
ルーティングをするには、Flask(__name__)で作成されたインスタンスを用いて、定義した関数にデコレーション
@app.route()
をつけることで実現することができる。

以下に、ルーティングの設定をした例を記述する。
Flaskのアプリケーションの立ち上げ方法は、こちら(Windows, Mac)のページを参考にされたい
Example
- ルーティングの設定(app.py)
app = Flask(__name__)
@app.route('/item-list') # http://○○○/item-listを実行した場合にこの関数が実行される
def func1():
return '<h1>商品一覧ページです</h1>'
@app.route('/item-detail') # http://○○○/item-detailを実行した場合にこの関数が実行される
def func2():
return '<h1>商品詳細ページです</h1>'
@app.route('/item-delete') # http://○○○/item-deleteを実行した場合にこの関数が実行される
def func3():
return '<h1>商品削除ページです</h1>'
if __name__ == '__main__':
app.run()
次に、app.pyを実行してアプリケーションを立ち上げ、各ページを表示した。
ここでは、ローカル環境で実行しているため、ホスト名は127.0.0.1でアクセスしている。
ポート番号はFlaskのデフォルトの5000である。
- http://127.0.0.1:5000/item-list表示結果
- http://127.0.0.1:5000/item-detail表示結果
- http://127.0.0.1:5000/item-delete表示結果
Flaskで値を渡す動的なルーティングと渡す値の種類
では次に動的なルーティングについて説明したい。動的なルーティングとは、URLに変数を持たして、その変数に応じて表示されるページを変えるルーティング方法のことを言う。
例えば
- http://○○○.○○○.○○○/sample/1 → 画面上に1と表示する
- http://○○○.○○○.○○○/sample/1 → 画面上に2と表示する
などが例として挙げられる。
これを行うには、ルーティングの際に/<var>のように<>で囲まれた変数を記載し、
関数の引数にも、def func(var):と言うふうにvarを引数として取るようにして記述をする。
また、動的に値を送信する際に、その送信する値の型(整数、小数点、文字列)なども指定することができる。
・Flaskで送信できる値の型
型 | 意味 |
---|---|
string | デフォルト。スラッシュを除く文字列 |
int | 正の整数 |
float | 浮動小数点数 |
uuid | UUIDフォーマットの文字列。xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxのフォーマットで一意に識別する |
path | URLのパス。/を含んだ文字列 |
Example
では、実際に例を見ながら、動的なルーティングを確認しよう。
def func(id):
return '<h1>id={}商品詳細ページです</h1>'.format(id)
if __name__ == '__main__':
app.run()
次に、app.pyを実行してアプリケーションを立ち上げ、ページを表示する。
ここでは、ローカル環境で実行しているため、ホスト名は127.0.0.1でアクセスしている。
ポート番号はFlaskのデフォルトの5000である。
- http://127.0.0.1:5000/item-detail/12の表示結果
ここで、idはint型のため(<int>としているため)、関数の中で整数として扱い、計算をすることもできる。
- 計算をしてその結果を表示する
def func(id):
id += 10
return '<h1>id={}商品詳細ページです</h1>'.format(id)
この場合idに10足されて以下のように表示される。
ちなみに、stringを指定して、計算しようとするとエラーになるので、注意が必要である。
- stringに対して+10をしてエラーとなった例
def func(id):
id += 10 # TypeError: can only concatenate str (not "int") to str
return '<h1>id={}商品詳細ページです</h1>'.format(id)
他にも、pathを指定した場合とuuidを指定した場合も見ておきたい。
pathとは要するに、/(スラッシュ)を含んだ文字列のことで、uuidとは重複のないIDのことで、XXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXXで表される。
- pathを用いた動的ルーティングの例
def func(path):
return 'path = {}'.format(path)
- uuidを用いた動的ルーティングの例
def func(uuid):
type(uuid) #class 'uuid.UUID'
return 'uuid = {}'.format(uuid)
以上、動的なルーティングについて説明した。
複数の値を渡す動的なルーティング
動的なルーティングで複数の値をわたすこともできる。
この場合は、routeを<〇〇>/<××>として、
関数を、def func(〇〇, ××):
と複数設定すればよい。
この場合、pathを最後の変数以外に設定することはできない。
Example
では、複数の値に対する動的なルーティングを見ていこう
def func(msg1, msg2):
type(msg1) # str
type(msg2) # str
return 'msg1 = {}, msg2 = {}'.format(msg1, msg2)
これを画面で表示する。
- http://127.0.0.1:5000/hello/goodbyeの表示結果
HTTPメソッド(GET,POST,PUT)に応じたルーティングの方法
HTTPメソッドにはGET, POST, PUTなど様々なものがあるが、FlaskのルーティングではデフォルトでGETに対してルーティングを行う。
では、GET以外に対してルーティングを行いたい場合どのように記載するとよいのか
と記載すればよい。
それぞれ、見ていきたい
Example
- GETとPOSTメソッドを許可する
def log_in():
if request.method == "POST":
pass # HTTPメソッドがPOSTだった場合に実行したい処理を記載する
elif request.method == "GET":
pass# GETの場合の処理を記載
- PUTリクエストを扱う例
def put_collection(collection):
pass PUTの処理を記述
複数のURLに対して同一の関数を対応させるルーティング
最後に複数のルーティングを行う方法について記述する。
と言っても、@app.routeを複数記述すればよいだけなので、いたって単純である。
Example
- 複数のルーティングを設定
@app.route("/sample2")# sample2でこの関数を実行
@app.route("/sample3")# sample3でこの関数を実行
def put_collection():
pass
このようにすると、/sample1, /sample2, /sample3のいずれのURLで遷移しても、同じ関数が実行されて同じ画面を表示することができる。
以上、FlaskでのURLマッピング(ルーティング)の方法について記述しました。