Django 套件生態系:必裝套件與推薦工具 | Django 教學

2026/07/03 2026/05/26
Django 套件生態系:必裝套件與推薦工具 | Django 教學

Django 的設計哲學是提供核心框架(ORM、Admin、Auth、Forms),而將更多功能交給社群生態系以 第三方套件(Third-party Packages) 的形式補充。從 API 開發的 Django REST Framework 到非同步任務的 Celery ,從社群登入的 django-allauth 到除錯工具的 django-debug-toolbar ,豐富的套件生態系讓你能快速組裝出功能完整的應用程式。本篇將全面盤點 Django 生態系中的必裝與推薦套件,並建立套件選擇與管理的最佳實踐。

Django 套件生態系概覽

Python 的套件倉庫 PyPI(Python Package Index) 上有數以千計與 Django 相關的套件。社群網站 djangopackages.org 是 Django 套件的主要查找資源,它對各類功能的套件做了分類比較,方便開發者選擇最適合的工具。

Django 生態系的核心理念是 「第三方電池」 ——官方提供穩固的核心框架,社群套件補充業務所需的功能:

Django 核心              → ORM、Admin、Auth、Forms、Sessions、Cache
Django REST Framework    → API 開發(序列化、認證、權限)
Celery                   → 非同步任務與排程
django-allauth           → 社群帳號登入(Google、GitHub、Facebook)
django-channels          → WebSocket / ASGI 即時通訊
django-storages          → 雲端儲存(S3、GCS)

必裝套件

以下三個套件幾乎是每個 Django 專案都會用到的基礎工具。

django-environ:環境變數管理

django-environ 讓你從 .env 檔案讀取環境變數,並提供 Django 專用的解析方法:

pip install django-environ
# settings.py
import environ

env = environ.Env(
    DEBUG=(bool, False)  # 預設值為 False
)
environ.Env.read_env('.env')  # 讀取 .env 檔案

DEBUG = env('DEBUG')
SECRET_KEY = env('DJANGO_SECRET_KEY')
ALLOWED_HOSTS = env.list('ALLOWED_HOSTS', default=[])

# 自動解析 DATABASE_URL 為 Django DATABASES 格式
DATABASES = {'default': env.db()}

# 自動解析 REDIS_URL 為 CACHES 格式
CACHES = {'default': env.cache('REDIS_URL')}
# .env(加入 .gitignore,不進版本控制)
DEBUG=True
DJANGO_SECRET_KEY=your-secret-key-here
ALLOWED_HOSTS=localhost,127.0.0.1
DATABASE_URL=postgresql://user:password@localhost:5432/mydb
REDIS_URL=redis://127.0.0.1:6379/1

django-extensions:開發工具集

django-extensions 提供一系列實用的管理指令與開發工具,是開發效率的大幅提升:

pip install django-extensions
# settings.py
INSTALLED_APPS = [
    # ...
    'django_extensions',
]

常用指令:

# shell_plus:自動 import 所有 Model,支援 IPython
python manage.py shell_plus --ipython

# show_urls:列出所有 URL pattern 與對應的 View
python manage.py show_urls

# graph_models:產生 Model 關聯圖(需安裝 graphviz)
python manage.py graph_models myapp -o myapp_models.png

# runserver_plus:增強版開發伺服器,內建 Werkzeug debugger
python manage.py runserver_plus

django-cors-headers:CORS 處理

django-cors-headers 處理 跨來源資源共享(Cross-Origin Resource Sharing, CORS) ,在前後端分離架構中是必備套件:

pip install django-cors-headers
# settings.py
INSTALLED_APPS = [
    'corsheaders',
    # ...
]

MIDDLEWARE = [
    'corsheaders.middleware.CorsMiddleware',  # 必須放在最前面
    'django.middleware.common.CommonMiddleware',
    # ...
]

# 允許的來源網域
CORS_ALLOWED_ORIGINS = [
    'https://app.yourdomain.com',
    'http://localhost:3000',          # 開發用前端
]
CORS_ALLOW_CREDENTIALS = True         # 允許攜帶 Cookie

API 開發套件

Django REST Framework(DRF)

Django REST Framework 是 Django 生態系中最重要的第三方套件之一,提供完整的 RESTful API 開發工具:

pip install djangorestframework
# settings.py
INSTALLED_APPS = [
    # ...
    'rest_framework',
]

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': [
        'rest_framework_simplejwt.authentication.JWTAuthentication',
    ],
    'DEFAULT_PERMISSION_CLASSES': [
        'rest_framework.permissions.IsAuthenticated',
    ],
    'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
    'PAGE_SIZE': 20,
}

drf-spectacular:OpenAPI 文檔

drf-spectacular 自動從 DRF 的 ViewSet 和 Serializer 產生 OpenAPI 3.0 規格文件與互動式文檔(Swagger UI / ReDoc):

pip install drf-spectacular
# settings.py
INSTALLED_APPS = [
    # ...
    'drf_spectacular',
]

REST_FRAMEWORK = {
    'DEFAULT_SCHEMA_CLASS': 'drf_spectacular.openapi.AutoSchema',
}

SPECTACULAR_SETTINGS = {
    'TITLE': 'My API',
    'DESCRIPTION': '我的 Django API 文檔',
    'VERSION': '1.0.0',
}
# urls.py
from drf_spectacular.views import SpectacularAPIView, SpectacularSwaggerView, SpectacularRedocView

urlpatterns = [
    path('api/schema/', SpectacularAPIView.as_view(), name='schema'),
    path('api/docs/', SpectacularSwaggerView.as_view(url_name='schema'), name='swagger-ui'),
    path('api/redoc/', SpectacularRedocView.as_view(url_name='schema'), name='redoc'),
]

django-filter:QuerySet 篩選

django-filter 為 DRF 提供靈活的 QuerySet 篩選機制:

pip install django-filter
# settings.py
INSTALLED_APPS = ['django_filters']
REST_FRAMEWORK = {
    'DEFAULT_FILTER_BACKENDS': ['django_filters.rest_framework.DjangoFilterBackend'],
}

# filters.py
import django_filters
from .models import Article

class ArticleFilter(django_filters.FilterSet):
    title = django_filters.CharFilter(lookup_expr='icontains')
    created_after = django_filters.DateTimeFilter(field_name='created_at', lookup_expr='gte')
    created_before = django_filters.DateTimeFilter(field_name='created_at', lookup_expr='lte')

    class Meta:
        model = Article
        fields = ['status', 'author', 'category']

# views.py
class ArticleViewSet(ModelViewSet):
    filterset_class = ArticleFilter
    # GET /articles/?title=django&status=published&created_after=2026-01-01

認證套件

django-allauth:社群帳號登入

django-allauth 是 Django 生態系中最完整的認證解決方案,支援本地帳號、社群登入與 多因素驗證(MFA, Multi-Factor Authentication)

pip install django-allauth
# settings.py
INSTALLED_APPS = [
    'django.contrib.sites',
    'allauth',
    'allauth.account',
    'allauth.socialaccount',
    'allauth.socialaccount.providers.google',
    'allauth.socialaccount.providers.github',
]

SITE_ID = 1
AUTHENTICATION_BACKENDS = [
    'django.contrib.auth.backends.ModelBackend',
    'allauth.account.auth_backends.AuthenticationBackend',
]

# Email 驗證設定
ACCOUNT_EMAIL_REQUIRED = True
ACCOUNT_EMAIL_VERIFICATION = 'mandatory'
ACCOUNT_AUTHENTICATION_METHOD = 'email'

djangorestframework-simplejwt:JWT 認證

djangorestframework-simplejwt 為 DRF 提供 JSON Web Token(JWT) 認證機制,適合前後端分離的 API 架構:

pip install djangorestframework-simplejwt
# settings.py
from datetime import timedelta

SIMPLE_JWT = {
    'ACCESS_TOKEN_LIFETIME': timedelta(minutes=30),
    'REFRESH_TOKEN_LIFETIME': timedelta(days=7),
    'ROTATE_REFRESH_TOKENS': True,
    'BLACKLIST_AFTER_ROTATION': True,
}

# urls.py
from rest_framework_simplejwt.views import TokenObtainPairView, TokenRefreshView

urlpatterns = [
    path('api/token/', TokenObtainPairView.as_view(), name='token_obtain_pair'),
    path('api/token/refresh/', TokenRefreshView.as_view(), name='token_refresh'),
]

管理介面套件

django-import-export:資料匯入匯出

django-import-export 讓 Django Admin 支援 CSV、XLS、JSON 等格式的資料匯入匯出:

pip install django-import-export
# admin.py
from import_export import resources
from import_export.admin import ImportExportModelAdmin

class ArticleResource(resources.ModelResource):
    class Meta:
        model = Article
        fields = ('id', 'title', 'author__username', 'status', 'created_at')
        export_order = ('id', 'title', 'author__username', 'status', 'created_at')

class ArticleAdmin(ImportExportModelAdmin):
    resource_classes = [ArticleResource]

admin.site.register(Article, ArticleAdmin)
# Admin 介面自動出現「匯入」「匯出」按鈕

django-admin-sortable2:拖曳排序

django-admin-sortable2 為 Django Admin 的列表頁面加入拖曳排序功能,適合需要自訂排序的場景(如選單管理、Banner 排序):

pip install django-admin-sortable2
# models.py
from django.db import models

class MenuItem(models.Model):
    title = models.CharField(max_length=100)
    order = models.PositiveIntegerField(default=0)  # 排序欄位

    class Meta:
        ordering = ['order']

# admin.py
from adminsortable2.admin import SortableAdminMixin

class MenuItemAdmin(SortableAdminMixin, admin.ModelAdmin):
    list_display = ['title', 'order']

admin.site.register(MenuItem, MenuItemAdmin)

開發工具

django-debug-toolbar:除錯面板

django-debug-toolbar 在瀏覽器頁面側邊顯示除錯面板,包含 SQL 查詢、模板渲染、快取使用等詳細資訊:

pip install django-debug-toolbar
# settings.py(僅開發環境)
if DEBUG:
    INSTALLED_APPS += ['debug_toolbar']
    MIDDLEWARE = ['debug_toolbar.middleware.DebugToolbarMiddleware'] + MIDDLEWARE
    INTERNAL_IPS = ['127.0.0.1']

# urls.py
if settings.DEBUG:
    import debug_toolbar
    urlpatterns = [
        path('__debug__/', include(debug_toolbar.urls)),
    ] + urlpatterns

django-silk:效能分析

django-silk 提供請求層級的效能分析,記錄每個 HTTP 請求的 SQL 查詢、執行時間與 Python 程式碼的效能剖析:

pip install django-silk
# settings.py
INSTALLED_APPS += ['silk']
MIDDLEWARE = ['silk.middleware.SilkyMiddleware'] + MIDDLEWARE

# urls.py
urlpatterns += [path('silk/', include('silk.urls', namespace='silk'))]
# 瀏覽 /silk/ 查看所有請求的詳細效能分析報告

django-extensions(再次提及)

前面已經介紹過 django-extensions 的管理指令,這裡補充它在開發工具方面的其他實用功能:

# 清除過期 session 資料
python manage.py clearsessions

# 重置資料庫(開發環境清除所有資料與重建結構)
python manage.py reset_db

# 驗證模板語法
python manage.py validate_templates

其他推薦套件

類別套件名稱用途
快取django-redisRedis 快取後端,支援連線池
儲存django-storages雲端儲存(S3、GCS、Azure)
任務celery + django-celery-beat非同步任務與排程管理
靜態檔案whitenoise無需 Nginx 的靜態檔案服務
健康檢查django-health-check服務健康狀態端點
資料庫 URLdj-database-urlDATABASE_URL 環境變數解析
測試factory-boy測試資料工廠
安全django-cspContent Security Policy 標頭

套件評估標準

面對眾多選擇,建立一套系統化的評估流程非常重要。

評估維度

評估維度檢查方式
活躍維護GitHub 最後提交日期(> 6 個月未更新需謹慎)
Django 版本相容README / PyPI 的 Classifiers 是否標示支援目前 Django 版本
Python 版本支援確認支援 Python 3.11+ / 3.12+
社群規模GitHub Stars、Issue 回應速度
文檔品質有無 ReadTheDocs 文檔
測試覆蓋率Codecov / Coveralls badge
授權MIT / BSD 最友善,GPL 需注意 copyleft
依賴樹pip show <package> 查看依賴項數量

套件選擇決策流程

Step 1:確認需求是否 Django 內建能解決?
    → Auth / Sessions / Admin / Cache / Email 先用原生功能

Step 2:搜尋 djangopackages.org
    → 比較同類套件的星數、最後更新日期、Issue 活躍度

Step 3:評估維護狀態
    → 最後 Commit < 6 個月 + 有人回應 Issue = 活躍
    → 最後 Commit > 1 年 = 謹慎使用,考慮 Fork

Step 4:測試相容性
    → 閱讀 CHANGELOG,確認支援目標 Django 版本
    → 在 CI 中加入測試確認不破壞現有功能

Step 5:評估依賴深度
    → pip install --dry-run 確認依賴數量
    → 避免拉入龐大依賴樹

djangopackages.org 資源介紹

djangopackages.org 是 Django 社群維護的套件比較平台,它的核心功能包含:

  • Grid 比較:同類套件並排比較功能特性、維護狀態與社群指標
  • 分類瀏覽:按功能類別(REST API、Authentication、Admin 等)瀏覽套件
  • 評分系統:基於 GitHub Stars、下載量、最後更新等指標自動評分
  • 版本相容性:標示每個套件支援的 Django 與 Python 版本

使用建議:在引入新套件前,先到 djangopackages.org 查看該類別的 Grid 比較,了解市場上有哪些選擇,再做出決定。


requirements.txt 管理策略

套件依賴管理直接影響專案的可重現性與安全性。以下介紹三種常見的管理策略。

策略一:pip-tools(推薦)

使用 pip-compile 從高層依賴生成精確鎖定的依賴清單:

pip install pip-tools
# requirements.in(高層依賴,人工維護)
django>=5.0,<6.0
djangorestframework>=3.15
django-environ
django-cors-headers
gunicorn
psycopg2-binary
# 從 requirements.in 生成 requirements.txt(含所有子依賴版本鎖定)
pip-compile requirements.in

# 更新至最新相容版本
pip-compile --upgrade

# 安裝鎖定的依賴
pip-sync requirements.txt

策略二:Poetry

# 新增依賴
poetry add django djangorestframework

# 新增開發依賴
poetry add --group dev pytest django-debug-toolbar

# 更新依賴
poetry update django

# 匯出為 requirements.txt(供 Docker 使用)
poetry export -f requirements.txt -o requirements.txt

策略三:uv(最快的套件管理工具)

uv 是以 Rust 撰寫的 Python 套件管理工具,速度比 pip 快 10-100 倍:

# 安裝 uv
curl -LsSf https://astral.sh/uv/install.sh | sh

# 初始化專案
uv init myproject

# 新增依賴
uv add django djangorestframework

# 生成精確鎖定檔
uv lock

# 依鎖定檔安裝
uv sync

依賴安全審計

# pip-audit:掃描已知安全漏洞
pip install pip-audit
pip-audit

# safety:另一個安全掃描工具
pip install safety
safety check

定期執行依賴安全審計,確保使用的套件沒有已知的安全漏洞。建議在 CI/CD(持續整合/持續部署) 流程中加入自動化安全掃描。


總結

Django 的第三方套件生態系是其強大的重要原因之一,善用社群套件可以大幅加速開發效率。以下整理本篇的重點:

  1. 必裝套件 建立專案基礎——django-environ 管理環境變數、django-extensions 提供開發工具集、django-cors-headers 處理跨域請求
  2. API 開發套件 構建完整 API——Django REST Framework 提供序列化與認證、drf-spectacular 自動生成 OpenAPI 文檔、django-filter 實現靈活篩選
  3. 認證套件 處理使用者驗證——django-allauth 支援社群登入與 MFA、djangorestframework-simplejwt 提供 JWT 認證
  4. 管理套件 增強 Admin 功能——django-import-export 實現資料匯入匯出、django-admin-sortable2 加入拖曳排序
  5. 開發工具 提升除錯效率——django-debug-toolbar 顯示 SQL 查詢與效能資訊、django-silk 提供詳細的效能分析
  6. 套件評估標準 幫助你做出正確選擇——從維護狀態、文檔品質、測試覆蓋率、授權類型到依賴深度,建立系統化的評估流程
  7. 依賴管理 確保可重現性與安全性——使用 pip-toolsPoetryuv 鎖定版本,定期執行 pip-audit 安全審計

至此,Django 教學系列已經涵蓋了從基礎到進階的完整知識體系。持續關注 Django 官方版本更新與社群套件發展,讓你的專案始終保持在最佳狀態。

BenZ Software Developer

熱愛技術的軟體開發者,在這裡分享程式開發經驗與學習筆記。