Django - 專案優化與回顧
在完成應用的基本功能與部署後,我們需要對整個專案進行最後的優化與回顧,以確保應用的穩定性、高效性及可維護性。本節課程將涵蓋性能調整、安全性強化、代碼重構,以及專案開發過程的總結與心得分享。
課程目標
- 深入學習應用性能調整的方法,包括數據庫優化與查詢分析。
- 強化應用安全性,應對常見安全威脅。
- 進行代碼重構與清理,提高專案的可讀性與可維護性。
- 回顧整個專案的開發流程,分析改進空間,提升開發技能。
課程內容
1. 性能優化
查詢效率優化
使用 Django 的 QuerySet
方法優化資料庫查詢:
使用
select_related
和prefetch_related
:1 2 3 4 5
# 減少查詢次數,使用 select_related posts = Post.objects.select_related('author').all() # 預取關聯對象,適合多對多查詢 tags = Tag.objects.prefetch_related('posts').all()
避免 N+1 問題: 減少重複查詢:
1 2
for post in Post.objects.all(): print(post.author.name) # 沒有 select_related 時會發生 N+1 問題
使用資料庫索引
為常用查詢的欄位添加索引:
1
2
3
4
from django.db import models
class Post(models.Model):
title = models.CharField(max_length=200, db_index=True) # 添加索引
分析查詢性能
啟用 Django Debug Toolbar 分析查詢性能:
1
pip install django-debug-toolbar
在 settings.py
中配置:
1
2
3
4
INSTALLED_APPS += ['debug_toolbar']
MIDDLEWARE = ['debug_toolbar.middleware.DebugToolbarMiddleware'] + MIDDLEWARE
INTERNAL_IPS = ['127.0.0.1']
2. 安全性優化
1. CSRF 防護
確保所有表單和 API 都啟用 CSRF 防護(Django 默認啟用)。對於 REST API,可使用 CSRF_COOKIE
:
1
2
# settings.py
CSRF_COOKIE_HTTPONLY = True
2. HTTPS
強制使用 HTTPS,確保數據傳輸安全:
1
2
3
4
5
6
7
# settings.py
SECURE_SSL_REDIRECT = True
SECURE_HSTS_SECONDS = 3600
SECURE_HSTS_INCLUDE_SUBDOMAINS = True
SECURE_HSTS_PRELOAD = True
SECURE_BROWSER_XSS_FILTER = True
SECURE_CONTENT_TYPE_NOSNIFF = True
3. 避免 SQL 注入
使用參數化查詢:
1
2
3
4
from django.db import connection
cursor = connection.cursor()
cursor.execute("SELECT * FROM my_table WHERE id = %s", [user_input])
4. 資料加密
敏感數據如密碼應使用散列存儲,Django 預設使用 pbkdf2
散列算法。
3. 代碼重構
清理未使用的代碼
使用工具如 flake8
和 pylint
檢查代碼中的未使用部分:
1
2
3
pip install flake8 pylint
flake8 myproject/
pylint myproject/
模組化代碼
將複雜的視圖或業務邏輯移至服務層或工具函數中:
1
2
3
# services/post_service.py
def get_recent_posts(limit=10):
return Post.objects.order_by('-created_at')[:limit]
在視圖中調用:
1
2
3
4
5
6
from services.post_service import get_recent_posts
class PostListView(APIView):
def get(self, request):
posts = get_recent_posts()
return Response({'posts': posts})
撰寫詳細註解與文檔
對重要模組、函數與 API 添加註解,並使用 Sphinx
生成文檔。
4. 回顧與總結
專案開發流程
- 需求分析:初步確定專案的功能與範圍。
- 設計架構:選擇框架(如 Django)、數據庫(如 PostgreSQL),規劃前後端分離架構。
開發過程:
- 採用敏捷開發迭代方式,每個功能模組完成後進行測試。
- 使用 Git 進行版本控制與分支管理。
- 部署與測試:確保生產環境配置與測試足夠穩定。
- 優化與維護:通過性能測試與安全性檢查進行持續改進。
課堂練習
- 使用 Django Debug Toolbar 找出專案中存在的性能瓶頸,並進行優化。
- 將專案的核心功能模組化,撰寫詳細的服務層函數。
- 測試應用的安全性,模擬 CSRF、XSS 等攻擊場景,並進行修正。
作業
- 使用 Docker 部署優化後的應用,並確保應用的啟動與運行穩定。
- 撰寫專案的完整文檔,包括功能介紹、API 說明與使用指南。
- 分析專案開發過程中存在的問題,總結改進措施,並對未來專案的開發提出建議。
本文章以 CC BY 4.0 授權