在 Flask 的 URL 中使用不同类型的参数

Salman Mehmood 2024年2月15日
在 Flask 的 URL 中使用不同类型的参数

通过这个解释,我们将了解 Flask 应用程序中的 URL 转换器,这意味着能够在任何 URL 中传递参数。我们还将学习如何在 Flask 应用程序的 URL 中使用不同类型的参数。

在 Flask 的 URL 中使用不同类型的参数

现在我们将讨论 URL 参数并进行演示;我们将从默认开始,这是最基本的示例。为此,我们将创建一个路由并传入 '/default/<params>'route()

/default 将指向 URL。URL 的第二部分是参数,我们在大于和小于符号内指定参数。

然后我们将创建一个名为 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 后,我们将看到默认为字符串的参数值。

我们将向你展示你可以使用的其他数据类型,但是对于字符串的分析,我们将向你展示如果我们传递一个数字和十进制数字,那么这些都将起作用,因为它被转换为一个字符串。这样,我们将获得我们在端点中传递的任何值。

Flask URL 参数输出 1

如果我们不传递参数,我们会得到一个未找到的错误,因为它需要一个参数。为了处理这种情况,当用户没有传递任何东西时,我们将指定另一个路由并把它放在上面。

在此路由中,我们将传递一个名为 defaults 的关键字参数并获取 params 及其值。

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

现在我们将重新启动它,如果我们在不传递参数的情况下使用 URL,我们将获得默认值 John,但如果我们传递该值,那么我们将获得该值而不是默认值。

Flask URL 参数输出 2

让我们在路由中将数据类型作为字符串传递,以指定它只能是字符串。我们首先输入 string,然后是冒号,然后是参数名称。

我们将为此路由定义另一个名为 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> 开头。

@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

另一件事是路径 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 App 的完整源代码:

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