iT邦幫忙

2026 iThome 鐵人賽

DAY 26
0

前言

上一篇做出了第一個 AI Todo 畫面,但就算 MySQL 裡已經有很多任務,網頁也完全不知道。

所以今天要把昨天做好的網頁和前面一直使用的 MySQL 接起來,讓資料庫裡的任務,可以自動顯示在Todo 頁面。

今天實際上只要改 app.py 的首頁 + index.html,資料庫不用改。

改 app.py

更改首頁 Route

@app.route("/")
def index():
    conn = get_connection()
    cursor = conn.cursor(dictionary=True)

    cursor.execute("""
        SELECT *
        FROM tasks
        WHERE status != 'done'
        ORDER BY deadline ASC
    """)

    tasks = cursor.fetchall()

    cursor.close()
    conn.close()

    return render_template("index.html", tasks=tasks)

這次查詢的方式多加了兩個條件:

WHERE status != 'done'
ORDER BY deadline ASC

WHERE status != 'done' 是先把已經完成的任務排除,因為 Todo 首頁目前主要想看到的是「還有哪些事情要做」。

ORDER BY deadline ASC 則是按照截止時間排序,Deadline 越近的任務會越前面。

查詢完成後:

tasks = cursor.fetchall()

會把 MySQL 查到的所有任務存進 tasks。

最後再透過:

return render_template("index.html", tasks=tasks)

把這些資料一起交給 index.html。

更改index.html

把原先假設的兩個任務改成

{% for task in tasks %}

<div class="task">
    <h2>{{ task.title }}</h2>

    <p>截止日期:{{ task.deadline }}</p>
    <p>重要程度:{{ task.importance }}</p>
    <p>預估時間:{{ task.estimated_minutes }} 分鐘</p>
    <p>進度:{{ task.progress }}%</p>
    <p>狀態:{{ task.status }}</p>
</div>

{% endfor %}

實際執行

螢幕擷取畫面 2026-10-07 114224

這裡第一次用到 Flask 的 Jinja 模板。

{% for task in tasks %}

可以把它想成 Python 裡面的:

for task in tasks:

Flask 傳進來多少筆任務,它就會重複產生多少張 .task 卡片。

而:

{{ task.title }}

則是把目前這筆任務的 title 顯示出來。

所以像:

{{ task.deadline }}
{{ task.importance }}
{{ task.progress }}

就會分別顯示資料庫裡的截止日期、重要程度和目前進度。

這樣就不用像昨天一樣,每新增一個任務就自己再寫一組 HTML。


現在資料庫裡的任務已經可以直接顯示在網頁上,不需要每新增一筆任務就跑回去修改 HTML。

不過目前還是只能「看」。

下一篇就把前面已經完成的:

PUT /tasks/<task_id>/complete

真正搬到網頁上。

直接按一下「完成任務」,讓 MySQL 裡的 progress 變成 100、status 變成 done,完成的任務也直接從目前的 Todo 清單消失。


上一篇
Day 25|不再只看 API:替 AI Todo 做出第一個操作畫面
下一篇
Day 27|不用再開 Postman:直接在網頁完成、刪除 Todo
系列文
如果 AI 幫我安排每日的任務?——讓待辦清單不只是清單:LLM × Flask × MySQL 打造動態任務規劃系統 共 30 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言