第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

首頁(yè) 慕課教程 Flask 框架教程 Flask 框架教程 Flask 中的動(dòng)態(tài)路由

Flask 中的動(dòng)態(tài)路由

在前面章節(jié)使用的路由中,我們已經(jīng)知道了一條固定的路徑和一個(gè)處理函數(shù)相綁定,當(dāng)訪問(wèn)這條路徑時(shí)會(huì)觸發(fā)相應(yīng)的處理函數(shù)。路由中的路徑是固定的,一條路徑對(duì)應(yīng)一個(gè)處理函數(shù),無(wú)法處理復(fù)雜的情況。本小節(jié)介紹動(dòng)態(tài)路由,路由中的路徑是一個(gè)包含有參數(shù)的模板,可以匹配多條路徑。

Tips:本節(jié)課所有的代碼已經(jīng)上傳到 Github 可以點(diǎn)擊這里進(jìn)行下載。

1. 靜態(tài)路由

在前面章節(jié)使用的路由中,路徑是固定的、不變的。例如,網(wǎng)站中有 3 個(gè)用戶 tom、jerry、mike,提供了 3 個(gè)路徑訪問(wèn)這 3 個(gè)用戶的信息,如下表所示:

路徑 處理函數(shù)
/user/tom show_user_tom()
/user/jerry show_user_jerry()
/user/mike show_user_mike()

編寫(xiě)程序 static.py,包含有 3 個(gè)路由:

from flask import Flask
app = Flask(__name__)

@app.route('/user/tom')
def show_user_tom():
    return 'My name is tom'

@app.route('/user/jerry')
def show_user_jerry():
    return 'My name is jerry'

@app.route('/user/mike')
def show_user_mike():
    return 'My name is mike'

app.run()

在第 4 行,將路徑 ‘/user/tom’ 與處理函數(shù) show_user_tom () 綁定;在第 8 行,將路徑 ‘/user/jerry’ 與處理函數(shù) show_user_jerry () 綁定;在第 12 行,將路徑 ‘/user/mike’ 與處理函數(shù) show_user_mike () 綁定。

程序 static.py 存在一個(gè)明顯的問(wèn)題:3 個(gè)頁(yè)面處理函數(shù)的功能邏輯是相同的,存在有明顯的代碼重復(fù)。在下個(gè)小節(jié),使用動(dòng)態(tài)路由解決代碼重復(fù)的問(wèn)題。

2. 動(dòng)態(tài)路由

Flask 中動(dòng)態(tài)路由是指帶有參數(shù)的頁(yè)面路徑,如下所示:

/prefix/<參數(shù)>

它是一個(gè)模板,可以匹配多條路徑,將參數(shù)放置在符號(hào) <和> 之間。

針對(duì)上一節(jié)的例子,頁(yè)面路徑 /user/<name> 可以匹配如下 3 個(gè)頁(yè)面路徑:

  • /user/tom
  • /user/jerry
  • /user/mike

因此,只需要編寫(xiě)一個(gè)頁(yè)面處理函數(shù)即可處理以上 3 個(gè)頁(yè)面,編寫(xiě)程序 dynamic.py

from flask import Flask
app = Flask(__name__)

@app.route('/user/<name>')
def show_user(name):
    return 'My name is %s' % name

app.run()

在第 4 行,定義了動(dòng)態(tài)路徑 /user/<name>,匹配所有以 /user/ 開(kāi)頭的路徑;在第 5 行,定義了相應(yīng)的處理函數(shù) show_user,函數(shù)有一個(gè)參數(shù) name;假設(shè)實(shí)際的路徑是 /user/tom,與 /user/<name> 匹配成功,并且將 tom 存儲(chǔ)到參數(shù) name 中。

比較上一個(gè)小節(jié) static.py 和本小節(jié)的 dynamic.py,通過(guò)動(dòng)態(tài)路由可以使用一個(gè)處理函數(shù)處理一批相關(guān)的頁(yè)面路徑,在很多應(yīng)用場(chǎng)景中是必需的。

3. 轉(zhuǎn)換器

在 Flask 中,參數(shù)類(lèi)型默認(rèn)是 string,但是也可以指定其他類(lèi)型,比如數(shù)字 int 等,如下所示:

/prefix/<類(lèi)型轉(zhuǎn)換器:參數(shù)>

類(lèi)型轉(zhuǎn)換器將默認(rèn)的字符串類(lèi)型轉(zhuǎn)換為指定的類(lèi)型,F(xiàn)lask 中主要有以下 4 種基本類(lèi)型轉(zhuǎn)換器:

類(lèi)型 說(shuō)明
string 默認(rèn),可以不用寫(xiě)
int 整數(shù)
float 同 int,但是接受浮點(diǎn)數(shù)
path 和 string 相似,但接受斜線

4. 類(lèi)型轉(zhuǎn)換的例子

本節(jié)編寫(xiě)程序 conv.py 演示轉(zhuǎn)換器的功能:

from flask import Flask
app = Flask(__name__)

@app.route('/user/<name>')
def show_user(name):
    return 'My name is %s' % name

@app.route('/age/<int:age>')
def show_age(age):
    return 'age is %d' % age

@app.route('/price/<float:price>')
def show_price(price):
    return 'price is %f' % price

@app.route('/path/<path:name>')
def show_path(name):
    return 'path is %s' % name

app.run()

程序 conv.py 中定義了 4 條動(dòng)態(tài)路由,如下表所示:

動(dòng)態(tài)路由 參數(shù)類(lèi)型 參數(shù) 處理函數(shù)
/user/<name> 字符串 name show_user
/age/<int:age> int age show_age
/price/<float:price> float price show_price
/path/<path:name> path name show_path

當(dāng)用戶訪問(wèn)路徑時(shí),與動(dòng)態(tài)路由匹配并提取出相應(yīng)的參數(shù),處理函數(shù)返回如下:

動(dòng)態(tài)路由 實(shí)際路徑 返回值
/user/<name> /user/tom My name is tom
/age/<int:age> /age/26 age is 26
/price/<float:price> /price/31.4 price is 31.4
/path/<path:name> /path/abc/xyz path is abc/xyz

5. 小結(jié)

本節(jié)講解了 Flask 中的動(dòng)態(tài)路由的概念、如何提取路由中的參數(shù)和設(shè)置參數(shù)類(lèi)型,使用思維導(dǎo)圖概括如下:

圖片描述