1. 程式人生 > 其它 >flask訪問404_FLASK部落格系列3——路由

flask訪問404_FLASK部落格系列3——路由

技術標籤:flask訪問404

0ff1720201742616b6124f6d84b24530.png

斷更了幾天,我又回來了。

今天我們來講講路由。這個路由可不是我們家裡用的路由,Flask路由規則都是基於Werkzeug的路由模組的,它還提供了很多強大的功能。現代 web 應用都使用有意義的 URL ,這樣有助於使用者記憶,網頁會更得到使用者的青睞, 提高回頭率。

從上篇文章我們知道,使用 route()

@app.route('/') 
def hello_world(): 
    return 'Hello World!'  

@app.route('/index') 
def hello_world(): 
    return 'Hello World!'
 

誒,那有朋友就說,能不能帶引數呢?那當然可以,我們一起來看看。

帶變數的路由

1、在路徑中新增變數

聰明的同學已經猜到了。flask通過把URL的一部分標記為<variable_name>,就可以實現在URL中新增變數。

@app.route('/hi/<username>') 
def show_user_ifno(username): 
    return 'Hi %s' % username

我們只需要在位址列中輸入 http://127.0.0.1:5000/hi/jack, 你將在頁面上看到“Hi jack”的字樣。URL路徑彙總 /hi/ 後面的引數被作為show_user_info()

函式的username 引數傳了進來,如下圖。

ffd09425b70d08d982080ddc917608d9.png

2、為變數指定型別

在宣告變數時,我們還可以指定變數被對映的型別。使用方法也很簡單,我們只需要加一個轉換器即可。通過使用 <converter:variable_name> , 為變數指定規則。

比如:

@app.route('/user/<int:user_id>') 
def get_user(user_id): 
    return 'User ID: %d' % user_id

如果你嘗試訪問 http://127.0.0.1:5000/user/jack, 你會看到404錯誤,如下圖:

442304159cfbdc111a61b667d9580013.png

這是應為引數型別轉換器int:

幫你控制好了傳入引數的型別只能是整形。我們來嘗試一下訪問 http://127.0.0.1:5000/user/123 。頁面就會有 “User ID: 123”顯示出來。如下圖:

aa946f7fe6fee3e6b23a85b4aadb95a0.png

我們接著來看看,flask支援哪幾種轉換器:

string

(預設值) 接受任何不包含斜槓的文字

int

接受正整數

float

接受正浮點數

path

類似 string ,但可以包含斜槓

uuid

接受 UUID 字串

3、路徑分割符的作用

在URL路徑中,“/”被用作路徑分隔符。當它被寫在URL路徑的開頭時,則表明本路徑是一個絕對路徑。當它被寫在路徑中間時 ,它被用作隔離路徑的層級。那麼,當它被寫在最後時,它的作用又是什麼呢?

我們來看下面的例子。

@app.route('/hello') 
def hello(): 
    return 'Hello World!'   


@app.route('/hi/') 
def hi(): 
    return 'Hello World!' 

第1個路徑沒有“/”分隔符,它看上去更像是一個檔名;第2個路徑的最後“/”分隔符,它看上去更像是一個目錄。兩種方式對它們的訪問效果可是有很大不同的:有“/”作為結尾的路徑除了可以接受對其本身的訪問,也可以接受相同路徑字首但不帶“/”結尾的路徑訪問;而不帶“/”結尾的路徑樣式則沒有此效果。下面我們以表格的形式來呈現給大家看,看完你就會一目瞭然。

8bac2261d818c8244543f660e66a311c.png

當然,路由的知識還有很多,後面還有自定義轉化器,路由地址反向生成等。內容還是蠻多的, 如果您想繼續深入瞭解,可以留言。下期我們再見。