01-5. 狀態碼與錯誤處理 ⏱️ 閱讀時間: 12 分鐘 🎯 難度: ⭐⭐ (基礎)
🤔 一句話解釋 HTTP 狀態碼告訴客戶端「請求的結果是什麼」,錯誤處理讓你優雅地告訴客戶端「哪裡出問題了」。
📊 HTTP 狀態碼速查表 1xx - 資訊回應(很少用) 2xx - 成功 3xx - 重定向 4xx - 客戶端錯誤 5xx - 伺服器錯誤常用狀態碼 狀態碼 名稱 用途 200 OK 成功(預設) 201 Created 資源建立成功 204 No Content 成功但無回應內容 400 Bad Request 請求格式錯誤 401 Unauthorized 未認證 403 Forbidden 無權限 404 Not Found 資源不存在 409 Conflict 資源衝突 422 Unprocessable Entity 驗證失敗 500 Internal Server Error 伺服器錯誤 ✅ 設定成功狀態碼 方法 1:使用 status_code 參數 from fastapi import FastAPI, status app = FastAPI() # 建立資源 → 201 Created @app.
Yoru Karu Studio
程式設計學習筆記 | 生活心得程式設計學習筆記 | 生活心得
01-6. 自動生成 API 文件 ⏱️ 閱讀時間: 10 分鐘 🎯 難度: ⭐ (入門)
🤔 一句話解釋 FastAPI 自動根據你的程式碼生成互動式 API 文件,不需要額外撰寫!
📚 兩種內建文件介面 FastAPI 內建兩種 API 文件介面:
Swagger UI 訪問: http://localhost:8000/docs特色:
✅ 互動式測試(直接在瀏覽器發送請求) ✅ 清楚的請求/回應格式 ✅ 支援認證測試 ✅ 業界標準 ReDoc 訪問: http://localhost:8000/redoc特色:
✅ 更美觀的閱讀介面 ✅ 適合作為對外文件 ✅ 支援搜尋 ✅ 支援下載 OpenAPI 規格 🎨 自訂 API 資訊 基本設定 from fastapi import FastAPI app = FastAPI( title="我的超棒 API", description=""" ## 🚀 API 說明 這是一個功能強大的 API,提供以下功能: * **使用者管理** - 註冊、登入、個人資料 * **商品管理** - 新增、編輯、刪除商品 * **訂單處理** - 建立訂單、追蹤狀態 ### 認證方式 使用 JWT Bearer Token 進行認證。 """, version="1.
01-7. 專案結構最佳實踐 ⏱️ 閱讀時間: 15 分鐘 🎯 難度: ⭐⭐ (基礎)
🤔 一句話解釋 好的專案結構讓程式碼易於維護、測試和擴展,是成為資深工程師的必備技能。
📁 從單檔案到多檔案 小型專案(學習/原型) 一個 main.py 就夠了:
my-project/ ├── main.py ├── requirements.txt └── .env中型專案(一般應用) my-project/ ├── app/ │ ├── __init__.py │ ├── main.py # 應用程式入口 │ ├── config.py # 設定管理 │ ├── database.py # 資料庫連線 │ ├── models.py # 資料庫模型 │ ├── schemas.py # Pydantic 模型 │ ├── crud.py # CRUD 操作 │ └── routers/ │ ├── __init__.py │ ├── users.
02-1. Pydantic 基礎模型 ⏱️ 閱讀時間: 12 分鐘 🎯 難度: ⭐⭐ (基礎)
🤔 一句話解釋 Pydantic 是 Python 資料驗證的瑞士刀,讓你用 Type Hints 定義資料結構,自動驗證和轉換資料。
🎯 為什麼需要 Pydantic? 沒有 Pydantic 的痛苦 # ❌ 傳統方式:手動驗證 def create_user(data: dict): # 檢查必填欄位 if "email" not in data: raise ValueError("email is required") if "age" not in data: raise ValueError("age is required") # 檢查型別 if not isinstance(data["email"], str): raise ValueError("email must be string") if not isinstance(data["age"], int): raise ValueError("age must be integer") # 檢查格式 if "@" not in data["email"]: raise ValueError("invalid email format") if data["age"] < 0 or data["age"] > 150: raise ValueError("age must be between 0 and 150") # 終於可以使用了.
02-2. 欄位驗證與約束 ⏱️ 閱讀時間: 15 分鐘 🎯 難度: ⭐⭐ (基礎)
🤔 一句話解釋 Pydantic 提供豐富的內建驗證器,讓你用簡單的參數就能定義複雜的驗證規則。
🔢 數字驗證 基本約束 from pydantic import BaseModel, Field class NumberConstraints(BaseModel): # 大於 (greater than) gt_example: int = Field(gt=0) # > 0 # 大於等於 (greater than or equal) ge_example: int = Field(ge=0) # >= 0 # 小於 (less than) lt_example: int = Field(lt=100) # < 100 # 小於等於 (less than or equal) le_example: int = Field(le=100) # <= 100 # 組合使用 age: int = Field(ge=0, le=150) # 0 <= age <= 150 price: float = Field(gt=0, le=99999.
02-3. 自訂驗證器 ⏱️ 閱讀時間: 15 分鐘 🎯 難度: ⭐⭐⭐ (中級)
🤔 一句話解釋 當內建驗證不夠用時,使用自訂驗證器實現任何你想要的驗證邏輯。
🎯 Pydantic v2 驗證器類型 ┌─────────────────────────────────────────────┐ │ 驗證器執行順序 │ ├─────────────────────────────────────────────┤ │ 1. before validator (原始輸入) │ │ ↓ │ │ 2. 型別轉換/核心驗證 │ │ ↓ │ │ 3. after validator (轉換後的值) │ │ ↓ │ │ 4. model_validator (整個模型) │ └─────────────────────────────────────────────┘ 🔧 field_validator - 欄位驗證器 基本用法 from pydantic import BaseModel, field_validator class User(BaseModel): name: str age: int @field_validator('name') @classmethod def name_must_not_be_empty(cls, v: str) -> str: if not v.