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-redis | Redis 快取後端,支援連線池 |
| 儲存 | django-storages | 雲端儲存(S3、GCS、Azure) |
| 任務 | celery + django-celery-beat | 非同步任務與排程管理 |
| 靜態檔案 | whitenoise | 無需 Nginx 的靜態檔案服務 |
| 健康檢查 | django-health-check | 服務健康狀態端點 |
| 資料庫 URL | dj-database-url | DATABASE_URL 環境變數解析 |
| 測試 | factory-boy | 測試資料工廠 |
| 安全 | django-csp | Content 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 的第三方套件生態系是其強大的重要原因之一,善用社群套件可以大幅加速開發效率。以下整理本篇的重點:
- 必裝套件 建立專案基礎——
django-environ管理環境變數、django-extensions提供開發工具集、django-cors-headers處理跨域請求 - API 開發套件 構建完整 API——
Django REST Framework提供序列化與認證、drf-spectacular自動生成 OpenAPI 文檔、django-filter實現靈活篩選 - 認證套件 處理使用者驗證——
django-allauth支援社群登入與 MFA、djangorestframework-simplejwt提供 JWT 認證 - 管理套件 增強 Admin 功能——
django-import-export實現資料匯入匯出、django-admin-sortable2加入拖曳排序 - 開發工具 提升除錯效率——
django-debug-toolbar顯示 SQL 查詢與效能資訊、django-silk提供詳細的效能分析 - 套件評估標準 幫助你做出正確選擇——從維護狀態、文檔品質、測試覆蓋率、授權類型到依賴深度,建立系統化的評估流程
- 依賴管理 確保可重現性與安全性——使用
pip-tools、Poetry或uv鎖定版本,定期執行pip-audit安全審計
至此,Django 教學系列已經涵蓋了從基礎到進階的完整知識體系。持續關注 Django 官方版本更新與社群套件發展,讓你的專案始終保持在最佳狀態。