04-6. 密碼重設流程 ⏱️ 閱讀時間: 15 分鐘 🎯 難度: ⭐⭐⭐ (進階)
🤔 一句話解釋 安全的密碼重設流程使用一次性 Token,透過 Email 驗證使用者身份後允許重設密碼。
🔄 完整流程 ┌─────────────────────────────────────────────────────────────┐ │ 密碼重設流程 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ 1. 使用者請求重設密碼 │ │ ┌──────┐ ┌──────┐ │ │ │ User │ ── 輸入 Email ────▶ │Server│ │ │ └──────┘ └──┬───┘ │ │ │ │ │ 2. 產生 Token 並寄送 Email │ │ │ ┌──────────────────────────────┘ │ │ │ │ │ ▼ │ │ 3. ┌────────────────────┐ │ │ │ Email Service │ │ │ │ 寄送重設連結 │ │ │ └────────┬───────────┘ │ │ │ │ │ ▼ │ │ 4.
Yoru Karu Studio
程式設計學習筆記 | 生活心得程式設計學習筆記 | 生活心得
04-7. Email 驗證 ⏱️ 閱讀時間: 15 分鐘 🎯 難度: ⭐⭐⭐ (進階)
🤔 一句話解釋 Email 驗證確保使用者提供的 Email 地址是真實有效的,防止假帳號和垃圾註冊。
🔄 驗證流程 ┌─────────────────────────────────────────────────────────────┐ │ Email 驗證流程 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ 1. 使用者註冊 │ │ ┌──────┐ ┌──────┐ │ │ │ User │ ── 註冊資料 ───────▶│Server│ │ │ └──────┘ └──┬───┘ │ │ │ │ │ 2. 建立帳號(未驗證) │ │ │ │ │ │ 3. 產生驗證 Token,發送 Email │ │ │ ┌──────────────────────────────┘ │ │ │ │ │ ▼ │ │ 4.
04-8. 雙因素認證 (2FA) ⏱️ 閱讀時間: 18 分鐘 🎯 難度: ⭐⭐⭐⭐ (高階)
🤔 一句話解釋 雙因素認證(2FA)在密碼之外增加第二層驗證,即使密碼洩漏也能保護帳號安全。
🔐 認證因素 ┌─────────────────────────────────────────────────────────┐ │ 認證因素類型 │ ├─────────────────────────────────────────────────────────┤ │ │ │ 1. Something you KNOW(你知道的) │ │ └─ 密碼、PIN 碼、安全問題 │ │ │ │ 2. Something you HAVE(你擁有的) │ │ └─ 手機、硬體金鑰、認證 App │ │ │ │ 3. Something you ARE(你是什麼) │ │ └─ 指紋、臉部辨識、虹膜掃描 │ │ │ ├─────────────────────────────────────────────────────────┤ │ 2FA = 兩個不同類型的因素組合 │ │ 例如:密碼(know)+ TOTP(have) │ └─────────────────────────────────────────────────────────┘ 🔄 TOTP 原理 TOTP (Time-based One-Time Password) ┌─────────────────────────────────────────────────────────┐ │ 1.
05-1. 非同步程式設計基礎 ⏱️ 閱讀時間: 20 分鐘 🎯 難度: ⭐⭐⭐ (進階)
🤔 一句話解釋 非同步程式設計讓程式在等待 I/O 操作時可以處理其他任務,大幅提升併發效能。
🔄 同步 vs 非同步 ┌─────────────────────────────────────────────────────────┐ │ 同步 (Synchronous) │ ├─────────────────────────────────────────────────────────┤ │ │ │ 任務 1: ████████████░░░░░░░░░░░░ 執行中... 等待 │ │ 任務 2: ████████████░░░░░░░░ 等待 │ │ 任務 3: ████████████ │ │ │ │ 總時間: ══════════════════════════════════════════ │ │ │ └─────────────────────────────────────────────────────────┘ ┌─────────────────────────────────────────────────────────┐ │ 非同步 (Asynchronous) │ ├─────────────────────────────────────────────────────────┤ │ │ │ 任務 1: ████░░░░████ 執行 → 等待 → 繼續 │ │ 任務 2: ████░░░░████ 執行 → 等待 → 繼續 │ │ 任務 3: ████░░░░████ 執行 → 等待 → 繼續 │ │ │ │ 總時間: ════════════════ │ │ │ │ 等待時間被有效利用! │ └─────────────────────────────────────────────────────────┘ 🎯 何時使用非同步 適合非同步的場景(I/O 密集) 場景 說明 資料庫查詢 等待資料庫回應 HTTP 請求 呼叫外部 API 檔案讀寫 讀取/寫入檔案 網路通訊 WebSocket、TCP 不適合非同步的場景(CPU 密集) 場景 說明 複雜計算 數學運算、演算法 圖片處理 調整大小、濾鏡 加密運算 雜湊、加密 資料壓縮 壓縮/解壓縮 📚 Python async/await 基礎 基本語法 import asyncio # 定義非同步函數 async def hello(): print("Hello") await asyncio.
05-2. asyncio 進階 ⏱️ 閱讀時間: 18 分鐘 🎯 難度: ⭐⭐⭐⭐ (高階)
🤔 一句話解釋 進階的 asyncio 技巧包括任務管理、錯誤處理、同步原語等,讓你寫出更健壯的非同步程式。
🔧 事件迴圈 事件迴圈基礎 import asyncio # 取得事件迴圈 loop = asyncio.get_event_loop() # 新版本推薦用 asyncio.run() asyncio.run(main()) # 或者在非同步函數中取得 async def example(): loop = asyncio.get_running_loop() print(f"當前迴圈: {loop}")自訂事件迴圈 import asyncio async def main(): print("Hello") await asyncio.sleep(1) print("World") # 使用自訂的事件迴圈設定 if __name__ == "__main__": # 設定 debug 模式 asyncio.run(main(), debug=True) 📋 任務管理 Task 物件 import asyncio async def long_task(name: str): print(f"{name} 開始") await asyncio.
05-3. 非同步上下文管理器 ⏱️ 閱讀時間: 15 分鐘 🎯 難度: ⭐⭐⭐ (進階)
🤔 一句話解釋 非同步上下文管理器讓你用 async with 語法管理非同步資源的取得和釋放。
🔄 同步 vs 非同步上下文管理器 # 同步上下文管理器 with open("file.txt") as f: content = f.read() # 非同步上下文管理器 async with aiofiles.open("file.txt") as f: content = await f.read() 📝 定義非同步上下文管理器 使用 aenter 和 aexit import asyncio class AsyncResource: """非同步上下文管理器""" def __init__(self, name: str): self.name = name async def __aenter__(self): """進入上下文時執行""" print(f"{self.name}: 取得資源") await asyncio.sleep(0.1) # 模擬非同步初始化 return self async def __aexit__(self, exc_type, exc_val, exc_tb): """離開上下文時執行""" print(f"{self.