Flask 基于類的視圖

2021-08-11 11:16 更新

0.7 新版功能.

URL 路由注冊(cè)

在路由系統(tǒng)中定義規(guī)則可以的方法可以概括為三種:

  1. 使用 flask.Flask.route() 裝飾器
  2. 使用 flask.Flask.add_url_rule() 函數(shù)
  3. 直接訪問暴露為 flask.Flask.url_map 的底層的 Werkzeug 路由系統(tǒng)

路由中的變量部分可以用尖括號(hào)指定( /user/<username>)。默認(rèn)情況下,URL 中的變量部分接受任何不帶斜線的字符串,而 <converter:name> 也可以指定不 同的轉(zhuǎn)換器。

變量部分以關(guān)鍵字參數(shù)傳遞給視圖函數(shù)。

下面的轉(zhuǎn)換器是可用的:

string 接受任何不帶斜線的字符串(默認(rèn)的轉(zhuǎn)換器)
int 接受整數(shù)
float int ,但是接受浮點(diǎn)數(shù)
path 和默認(rèn)的相似,但也接受斜線

這里是一些例子:

@app.route('/')
def index():
    pass

@app.route('/<username>')
def show_user(username):
    pass

@app.route('/post/<int:post_id>')
def show_post(post_id):
    pass

需要注意的一個(gè)重要細(xì)節(jié)是 Flask 處理結(jié)尾斜線的方式。你可以應(yīng)用下面兩個(gè) 規(guī)則來保證 URL 的唯一:

  1. 如果規(guī)則以斜線結(jié)尾,當(dāng)用戶以不帶斜線的形式請(qǐng)求,用戶被自動(dòng)重定向到 帶有結(jié)尾斜線的相同頁(yè)面。
  2. 如果規(guī)則結(jié)尾沒有斜線,當(dāng)用戶以帶斜線的形式請(qǐng)求,會(huì)拋出一個(gè) 404 not found 。

這與 web 服務(wù)器處理靜態(tài)文件的方式一致。這使得安全地使用相對(duì)鏈接地址成為 可能。

你可以為同一個(gè)函數(shù)定義多個(gè)規(guī)則。無論如何,他們也要唯一。也可以給定默認(rèn)值。 這里給出一個(gè)接受可選頁(yè)面的 URL 定義:

@app.route('/users/', defaults={'page': 1})
@app.route('/users/page/<int:page>')
def show_users(page):
    pass

這指定了 /users/ 為第一頁(yè)的 URL ,/users/page/N 為第 N 頁(yè)的 URL 。

以下是 route()add_url_rule() 接受的參數(shù)。兩者唯一的區(qū)別是,帶有路由參數(shù)的視圖函數(shù)用裝飾器定義,而不是 view_func 參數(shù)。

rule URL 規(guī)則的字符串
endpoint 注冊(cè)的 URL 規(guī)則的末端。如果沒有顯式地規(guī)定,F(xiàn)lask 本身假設(shè) 末端的名稱是視圖函數(shù)的名稱,。
view_func 當(dāng)請(qǐng)求呈遞到給定的末端時(shí)調(diào)用的函數(shù)。如果沒有提供,可以 在用在 view_functions 字典中以末端 作為鍵名存儲(chǔ),來在之后設(shè)定函數(shù)。
defaults 規(guī)則默認(rèn)值的字典。上面的示例介紹了默認(rèn)值如何工作。
subdomain 當(dāng)使用子域名匹配的時(shí)候,為子域名設(shè)定規(guī)則。如果沒有給定,假 定為默認(rèn)的子域名。
**options 這些選項(xiàng)會(huì)被推送給底層的 Rule 對(duì)象。一個(gè) Werkzeug 的變化是 method 選項(xiàng)的處理。methods是 這個(gè)規(guī)則被限定的方法列表( GET , POST 等等)。默認(rèn)情 況下,規(guī)則只監(jiān)聽 GET (也隱式地監(jiān)聽 HEAD )。從 Flask 0.6 開始,OPTIONS 也被隱式地加入,并且做標(biāo)準(zhǔn)的請(qǐng)求處理。 它們需要作為關(guān)鍵字參數(shù)來給定。
以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)