跳轉到

建立第一個 App

開始之前

任務目標

在這個章節中,我們會完成:

  • 了解 Django App 的概念
  • 學習 Project 和 App 的差異
  • 建立第一個 Django App
  • 了解 App 的目錄結構
  • settings.py 中註冊 App

什麼是 Django App?

在 Django 中,App(應用程式)是一個可重用的功能模組。一個專案(Project)可以包含多個 App,每個 App 負責特定的功能。

Project vs App

  • Project(專案):整個網站的設定和路由,包含 settings.pyurls.py
  • App(應用程式):專案中的一個功能模組,如使用者管理、部落格文章、購物車等

一個 Project 可以包含多個 App,一個 App 也可以被多個 Project 重複使用。

為什麼要用 App?

想像你在建立一個電商網站,可能需要這些功能:

  • 使用者管理(註冊、登入、個人資料)
  • 商品目錄(商品列表、分類、搜尋)
  • 購物車(加入購物車、修改數量)
  • 訂單系統(下單、付款、訂單追蹤)

如果把所有程式碼放在一起,會變得非常難以維護。透過 App,我們可以:

App 的優勢

  1. 模組化 - 每個功能獨立,容易維護
  2. 可重用 - 一個 App 可以用在不同專案
  3. 團隊協作 - 不同人負責不同 App,減少衝突
  4. 測試方便 - 可以針對單一 App 進行測試
  5. 職責清晰 - 每個 App 有明確的功能範圍

建立 App

使用 startapp 指令建立名為 practices 的 App:

uv run django-admin startapp practices  # (1)!
  1. 有時候會看到 uv run manage.py startapp practices 也是可以的,兩者效果完全相同

執行後,會在專案根目錄建立一個 practices 資料夾:

django-playground/
├── practices/              # 新建立的 App
│   ├── __init__.py
│   ├── admin.py           # Admin 後台設定
│   ├── apps.py            # App 設定
│   ├── migrations/        # 資料庫遷移檔案
│   │   └── __init__.py
│   ├── models.py          # 資料庫表定義
│   ├── tests.py           # 自動化測試
│   └── views.py           # 視圖
├── core/                  # 之前建立的專案
│   ├── settings.py
│   ├── urls.py
│   └── ...
├── manage.py
└── ...

App 結構說明

models.py

定義資料模型,對應資料庫的表

views.py

處理請求和回應的邏輯

admin.py

設定 Admin 後台要管理哪些資料模型

apps.py

App 的設定檔,顯示名稱或其他設定

migrations/

存放資料庫遷移檔案。當你修改 models.py 後,Django 會在這裡產生遷移檔案。

tests.py

自動化測試程式碼

註冊 App

建立 App 後,必須在 settings.py 中註冊,Django 才會載入它。

開啟 core/settings.py,找到 INSTALLED_APPS,並放入你的 App

INSTALLED_APPS = [
    "django.contrib.admin",
    "django.contrib.auth",
    "django.contrib.contenttypes",
    "django.contrib.sessions",
    "django.contrib.messages",
    "django.contrib.staticfiles",
    "practices",
]

別忘了註冊!

如果沒有在 INSTALLED_APPS 中註冊 App,Django 不會:

  • 載入該 App 的 models 與 templates
  • 執行該 App 的 migrations
  • 在 Admin 中顯示該 App 的資料

命名建議

  • 使用小寫字母底線(snake_case)
  • 名稱要簡短有意義
  • 避免使用 Python 或 Django 的保留字
  • 在專案中必須是唯一的,例如 auth 已經被 Django 使用了我們就不能使用
  • 保持專案風格一致(單數、複數 ......)
補充說明:組織 App 的方式

方式一:放在專案根目錄

django-playground/
├── blog/
├── shop/
├── core/
└── manage.py

這是預設的方式,適合小型專案。


方式二:放在 apps 資料夾

django-playground/
├── apps/
│   ├── __init__.py
│   ├── blog/
│   ├── shop/
├── core/
└── manage.py

適合中大型專案,結構更清晰。

但需要特別注意,使用這種方式時,需要調整 App 的 name

apps/blog/apps.py
class BlogConfig(AppConfig):
    name = "apps.blog"  # (1)!
  1. 預設會是 blog,需修改成完整的 Python 路徑 apps.blog

同時在 settings.py 中也需要修改註冊的方式

INSTALLED_APPS = [
    # ...
    "apps.blog",
]

任務結束

完成!

恭喜你完成了這個章節!現在你已經:

  • 了解 Django App 的概念
  • 學習 Project 和 App 的差異
  • 建立第一個 Django App
  • 了解 App 的目錄結構
  • settings.py 中註冊 App

常見問題

一個 App 應該包含多少功能?

一個 App 應該專注在單一職責。如果你發現一個 App 包含太多不相關的功能,考慮拆分成多個 App。

經驗法則:如果你能用一句話描述這個 App 的功能,那它的範圍可能是恰當的。

什麼時候應該建立新的 App?

當你需要:

  • 新增一個獨立的功能模組
  • 這個功能可能會被其他專案重複使用
  • 這個功能的資料模型和邏輯與現有 App 無關

App 之間可以互相引用嗎?

可以!App 之間可以透過 import 互相使用:

# 在 order App 中引用 blog 的 Model
from blog.models import Post

但要注意避免循環引用(A 引用 B,B 又引用 A)。