Flask の URL 内でさまざまなタイプのパラメーターを使用する

Salman Mehmood 2022年8月18日
Flask の URL 内でさまざまなタイプのパラメーターを使用する

この説明では、Flask アプリの URL コンバーターについて学習します。これは、任意の URL でパラメーターを渡す機能を意味します。また、Flask アプリの URL 内でさまざまなタイプのパラメーターを使用する方法についても学習します。

Flask の URL 内でさまざまなタイプのパラメーターを使用する

次に、URL パラメータについて説明し、それらを示します。最も基本的な例であるデフォルトから始めます。そのために、ルートを作成し、'/default/<params>'となる route() を渡します。

/default は URL につながります。URL の 2 番目の部分はパラメーターであり、大なり小なりの記号内でパラメーターを指定します。

次に、DEFAULT() という関数を作成し、ルートで定義した関数パラメーターに同じ名前を渡します。この場合、パラメーターは params になります。次に、値を返し、値をこの文字列と連結します。

from flask import Flask

app = Flask(__name__)


@app.route("/default/<params>")
def DEFAULT(params):
    return "The parameter is: " + params


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

アプリを起動してブラウザを開き、名前を渡すときに/default と入力すると、デフォルトで文字列であるパラメータの値が表示されます。

使用できる他のデータ型を示しますが、文字列の分析では、数値と 10 進数を渡すと、文字列に変換されるため、これらすべてが機能することを示します。このようにして、エンドポイントで渡したものの値を取得します。

Flask URL パラメータ出力 1

パラメータを渡さないと、パラメータが必要なため、notfound エラーが発生します。この場合を処理するために、ユーザーが何も渡さない場合は、別のルートを指定して、それを上に配置します。

このルート内で、defaults というキーワード引数を渡し、params とその値を取得します。

@app.route('/default', defaults={'params': 'John'})

ここで再起動し、パラメータを渡さずに URL を使用すると、デフォルト値の John が取得されますが、値を渡すと、デフォルト値の代わりにこの値が取得されます。

Flask URL パラメータ出力 2

ルートでデータ型を文字列として渡して、これが文字列のみであることを指定しましょう。最初に文字列、次にコロン、次にパラメータの名前を配置します。

このルートに String_Func() という別の関数を定義し、文字列を返し、ルートで定義したパラメーターを連結します。

@app.route("/str-url/<string:str_params>")
def String_Func(str_params):
    return "The string parameter is: " + str_params

デフォルトではパラメータタイプが文字列であるため、これはデフォルトルートと同じように機能していることがわかります。

Flask URL パラメータ出力 3

次に、さまざまなデータ型を処理する場合に何が起こるかを見てみましょう。次のデータ型は整数になります。別のルートパスを定義しましょう <int:int_params>;パラメータはあなたがそれを呼ぶものなら何でもあります。

次に、文字列を整数に連結できないため、通常どおり関数を定義し、それを文字列データ型に変換します。

@app.route("/int-url/<int:int_params>")
def Int_Func(int_params):
    return "The integer parameter is: " + str(int_params)

出力

Flask URL パラメータ出力 4

次に使用するデータ型は、<float:float_params> で始まる float です。

@app.route("/float-url/<float:float_params>")
def Float_Func(float_params):
    return "The float parameter is: " + str(float_params)

3.5 を渡すと、ページに表示されますが、3 を渡すと、3 が整数であり、Flask がそのように許可しないため、エラーが発生します。3.0 が必要な場合は、3.0 を渡すか、整数を取得する別のルートを作成する必要があります。

Flask URL パラメータ出力 5

もう 1つは、パス URL です。これにより、新しいルートを定義し、<path:our_path> などのパスデータ型とパス名を渡す必要があります。

@app.route("/path-route/<path:our_path>")
def Path_Func(our_path):
    return "Our path is: " + our_path

次に、URL に移動してパスを指定すると、これが表示されますが、スラッシュをいくつか入れて別のサブディレクトリを指定すると、すべてが選択され、スラッシュが含まれます。

Flask URL パラメータ出力 6

最後に紹介したいのは、同じルートで複数のパラメーターを組み合わせることができるということです。 <string:name>/<int:num> などの文字列と整数のパラメータを組み合わせます。

関数を定義し、関数内で両方のパラメーターを指定して返します。

@app.route("/combine-route/<string:name>/<int:num>")
def Combine_Func(name, num):
    return "User name is: " + name + " and user id is: " + str(num)

あなたがそれをよりよく理解できるように出力を見てください。

Flask URL パラメータ出力 7

Flask アプリの完全なソースコード:

from flask import Flask

app = Flask(__name__)
# This is the default route


@app.route("/default", defaults={"params": "John"})
@app.route("/default/<params>")
def DEFAULT(params):
    return "The string parameter is: " + params


# This route holds string data type
@app.route("/str-url/<string:str_params>")
def String_Func(str_params):
    return "The string parameter is: " + str_params


# This route holds int data type
@app.route("/int-url/<int:int_params>")
def Int_Func(int_params):
    return "The integer parameter is: " + str(int_params)


# This route holds float data type
@app.route("/float-url/<float:float_params>")
def Float_Func(float_params):
    return "The float parameter is: " + str(float_params)


# This route holds path data type
@app.route("/path-route/<path:our_path>")
def Path_Func(our_path):
    return "Our path is: " + our_path


# This route combine two parameters
@app.route("/combine-route/<string:name>/<int:num>")
def Combine_Func(name, num):
    return "User name is: " + name + " and user id is: " + str(num)


if __name__ == "__main__":
    app.run(debug=True)
著者: Salman Mehmood
Salman Mehmood avatar Salman Mehmood avatar

Hello! I am Salman Bin Mehmood(Baum), a software developer and I help organizations, address complex problems. My expertise lies within back-end, data science and machine learning. I am a lifelong learner, currently working on metaverse, and enrolled in a course building an AI application with python. I love solving problems and developing bug-free software for people. I write content related to python and hot Technologies.

LinkedIn