Try   HackMD

Flask實作_基礎_03_簡述url_for與route

tags: python flask

在討論Python Flask實作_基礎_01_建立第一個appPython Flask實作_基礎_02_透過url傳值之後,我們已經有了flask中關於路由的簡單概念,這次我們要討論flask中url_for的功能,以及它跟route的關聯。

作業說明

我們現在明白,透過裝飾器@app.route()可以定義路由,使用者可以利用該路由來訪問網頁。

@app.route('/') def index(): return 'hello man' @app.route('/user/<username>') def username(username): return 'i am ' + username @app.route('/age/<int:age>') def userage(age): return 'i am ' + str(age) + 'years old'

現在有一個問題在於如果今天程式都寫死路由,一但路由有所變更,那就必需對所有的專案開始搜尋,然後一起修正路由,對吧!

所以在flask有個方式可以避免這個問題,就是透過url_for,這是flask內建的函數,可以從flask直接導入

from flask import url_for

我們加入兩個路由測試,如下:

@app.route('/a')
def url_for_a():
    return 'here is a'

@app.route('/b')
def b():
    #  所得結果為'/a'
    return url_for('url_for_a')

我們定義了@app.route('/a')所裝飾的function名稱為url_for_a,然後在@app.route('/b')的部份,將@app.route('/a')所裝飾的functionurl_for_a當做url_for的參數,接著執行這個專案,測試如下:

這是@app.route('/a')


這是@app.route('/b')

我們會發現到@app.route('/b')所回傳的值是另一個路由/a,透過url_for可以讓flask反過來從被裝飾的function去找出相對應的路由。

所以在return的部份只要透過redirect搭配url_for,就可以將使用者引導到另一個路由去。那就可以避免掉調整路由之後整個專案都要去調整的問題了!

from flask import redirect @app.route('/a') def url_for_a(): return 'here is a' @app.route('/b') def b(): # 會將使用者引導到'/a'這個路由 return redirect(url_for('url_for_a'))

總結

redirect是一個重新導向的函數,從名稱不難理解它的功能,因此沒有多做說明,url_for非常實用,專案之中必然用到,它的概念不止如此,還有endpoint的觀念需要理解,但不急,實作之中我們會有更詳細的說明,不管如何,我們已經知道在專案內要避免直接寫死路由,而是利用redirect搭配url_for來避免因路由調整而必需整個專案大改的冏境。

上一話:Flask實作_基礎_02_透過url傳值
下一話:Flask實作_基礎_04_什麼是app.debug?