在 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