# Flask實作_基礎_03_簡述url_for與route ###### tags: `python` `flask` 在討論[Python Flask實作_基礎_01_建立第一個app](https://hackmd.io/s/SyP4YEnef)與[Python Flask實作_基礎_02_透過url傳值](https://hackmd.io/s/H1CMTVheG)之後,我們已經有了flask中關於路由的簡單概念,這次我們要討論flask中`url_for`的功能,以及它跟route的關聯。 ## 作業說明 我們現在明白,透過裝飾器`@app.route()`可以定義路由,使用者可以利用該路由來訪問網頁。 ```python= @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直接導入 ```python= from flask import url_for ``` 我們加入兩個路由測試,如下: ```python @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')`所裝飾的function`url_for_a`當做url_for的參數,接著執行這個專案,測試如下: 這是`@app.route('/a')`  這是`@app.route('/b')`  我們會發現到`@app.route('/b')`所回傳的值是另一個路由`/a`,透過`url_for`可以讓flask反過來從被裝飾的function去找出相對應的路由。 所以在return的部份只要透過`redirect`搭配`url_for`,就可以將使用者引導到另一個路由去。那就可以避免掉調整路由之後整個專案都要去調整的問題了! ```python= 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傳值](https://hackmd.io/s/H1CMTVheG) **下一話:**[Flask實作_基礎_04_什麼是app.debug?](https://hackmd.io/s/H10_LR2gz)
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up