ルーティング
関数の前に @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を実行するとルートの一覧を確認できる