iT邦幫忙

2023 iThome 鐵人賽

DAY 10
0
Software Development

Python Flask CICD 啟動 ! 建構屬於你的自動化流程 !系列 第 10

Day10 - Python Flask(四) - redirect 和 url_for

  • 分享至 

  • xImage
  •  

前情提要:

有時在觸發某些條件以後,會需要進行頁面上的跳轉,而在 Flask 當中即有提供一個函式,redirect,來協助我們完成此功能。但隨著網站不斷再更新,有時我們會更改網站的路徑,若 redirect 的路徑都寫死的話,會導致在開發上麵的不便利,因為得要一個一個更改,因此 Flask 提供了 url_for 來使我們動態的獲取路徑值,而這也是我們今天要來分享的。

頁面跳轉示範:

# app.py
from flask import Flask, request, redirect, render_template, url_for

app = Flask(__name__)

@app.route('/', methods=['GET', 'POST'])
def index():
    if request.method == 'POST':
        name = request.values['name']
        age = request.values['age']
        return redirect(url_for('welcome', name = name, age = age))
    return render_template('index.html') 

@app.route('/welcome/<name>/<age>')
def welcome(name, age):
    return render_template('welcome.html', name = name, age = age)
# index.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <form action="" method="post">
        <input type="text" name="name" placeholder="請輸入名字"> <br \> <br \>
        <input type="text" name="age" placeholder="請輸入年齡"> <br \> <br \>
        <input type="submit">
    </form>
</body>
</html>
# welcome.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <p>welcome {{name}} {{age}} years old</p>
</body>
</html>

程式碼講解

  1. redirect("路徑名"):此函式功能是在重新導向所想要的頁面。
  2. url_for("裝飾器函式名", key = value, key = value)
    • 此函式功能是在動態獲取對應的路徑,而其判斷的標準為裝飾器函式名。以上面例子為例,在 '/' 路徑點擊按鈕後,會重新導向到 /welcome/<name> 的路徑上,而此路徑裝飾器函式名為 welcome,因此此例子中的裝飾器函式名要填入 welcome
    • 這邊還提供一個參數是把想要的值傳給對應的路徑,並且是以 key-value 的形式傳送,因此假設要傳入的是 welcome 此路徑,根據我們上面會傳入的有 nameage 兩個 key,因此原先路徑就必須變成 welcome/<name>/<age>,這邊必須注意要根據傳入 key 的順序來填寫路徑。
    • 因此根據上面範例,完整的會為 url_for(url_for('welcome', name = name, age = age))。
  3. 因此可結合上面兩個函式成 redirect(url_for('welcome', name = name, age = age)),使其在往後的維護或擴充上都更加的方便。

上一篇
Day9 - Python Flask(三) - 表單設計
下一篇
Day11 - Python Flask(五) - 模板繼承
系列文
Python Flask CICD 啟動 ! 建構屬於你的自動化流程 !30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言