Flaskのルーティング

ルーティング

関数の前に @app.route(ルート) を設定する

@app.route("/")
def index():
    return "Test"

@app.route("/hoge")
def index():
    return "foobar"

methodsを省略するとGETとなります

methodの指定

GET以外を指定するのであればmethodsに配列で指定

@app.route("/", methods=["GET", "POST"])
def sample():
    return "hogehoge"

Flask 2.0以降では、以下のようにもかける

@app.get("/")
@app.post("/")
def sample():
    return "hogehoge"

これは、厳密には、以下のようにapp.routeを2回実行しているのと同等らしい

@app.route("/", methods=["GET"])
@app.route("/", methods=["POST"])
def sample():
    return "hogehoge"

尚、methodで処理を振り分けるには、from flask import requestを追加し、
request.method で判定する

任意のルートを受けるようにする

ルーティングに変数を設定し、任意のルートをうける

@app.route("/animal/<name>")
def sample(name):
    if(name == "cat"):
        return "ニャー"
    elif(name == "dog"):
        return "ワン"
    else:
        return "???"

/animal/cat ならニャーを返すといった感じになる
<>を設定したら、関数の引数に受ける必要あり

さすがになんでもうけるってのも問題だと思うので・・・

コンバーター

所定のパスをうけるよにするために指定する
blogとかで記事のidを受けたい場合は

from flask import Flask

app = Flask(__name__)

@app.route("/blog/<int:id>")
def sample(id):
    return str(id)

カスタムコンバーター

デフォルトのコンバーターだと足りないので、コンバーターをカスタムで作る
例えば正規表現に該当するパスだけ受け付ける場合

from flask import Flask
from werkzeug.routing import BaseConverter

app = Flask(__name__)

class RegexConverter(BaseConverter):
    def __init__(self, url_map, *items):
        super().__init__(url_map)
        self.regex = items[0]

app.url_map.converters['regex'] = RegexConverter #カスタムコンバーター追加

@app.route("/aaa/<regex('\d{4}-\d{2}-\d{2}'):date>")
def sample(date):
    return date

ルートの確認

flask routesを実行するとルートの一覧を確認できる

投稿日時: 2025-05-31 15:16:31
更新日時: 2025-06-01 10:36:01

内部リンク

Comment

最近の投稿

最近のコメント

タグ

アーカイブ

その他