在上一篇文章中,我們學習了如何設置Django Admin管理系統和整合Swagger來更方便地進行API文檔和測試。
本篇文章中,我們將探討如何建立Logger系統、Middleware,以及如何配置CORS,以確保API的安全性和性能。
Logger系統在應用開發中非常重要,因為它允許我們記錄應用程序的運行狀況、錯誤信息和其他重要事件。這些日誌信息對於調試、監控和維護應用程序至關重要。通過記錄日誌,我們可以更快地定位問題,並確保應用程序按預期運行。
首先,我們需要在settings.py
中配置Logger系統,確保可以將日誌輸出到控制台,方便我們進行調試和監控。
backend/settings.py
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'handlers': {
'console': {
'class': 'logging.StreamHandler',
'formatter': 'simpleRe'
},
},
'formatters': {
'simpleRe': {
'format': '{asctime} | {levelname} | {message}',
'style': '{',
},
},
'loggers': {
'django': {
'handlers': ['console'],
'level': 'INFO',
'propagate': False,
},
'': {
'handlers': ['console'],
'level': 'INFO',
},
}
}
然後我們可以在其他地方設置Log。例如,我們可以在驗證過程中添加日誌記錄:
hello/views.py
from rest_framework import permissions, viewsets
from .models import HelloModel
from .serializers import HelloSerializer
import logging
logger = logging.getLogger('django')
class IsMemberOfKing(permissions.BasePermission):
def has_permission(self, request, view):
logger.info("驗證中")
if request.user and request.user.groups.filter(name='king').exists():
return True
return False
class HelloViewSet(viewsets.ModelViewSet):
queryset = HelloModel.objects.all()
serializer_class = HelloSerializer
permission_classes = [permissions.IsAuthenticated, IsMemberOfKing]
Middleware是Django的一個輕量級插件,用於在請求和響應之間進行處理。它允許我們在處理請求之前和響應之後執行特定的操作,例如日誌記錄、性能分析、修改請求和響應等。使用Middleware,我們可以統一管理和處理應用程序中的各種操作,提升代碼的可維護性和重用性。
首先,我們在項目層級創建一個middleware.py
文件,然後定義我們的Middleware:
backend/middleware.py
import time
from django.utils.deprecation import MiddlewareMixin
import logging
logger = logging.getLogger(__name__)
class ExMiddleware(MiddlewareMixin):
def process_request(self, request):
request.start_time = time.time()
method = request.method
logger.info(f"Using {method} method")
def process_response(self, request, response):
if hasattr(request, 'start_time'):
elapsed_time = time.time() - request.start_time
logger.info(f"API {request.path} took {elapsed_time:.2f} seconds")
return response
def process_exception(self, request, exception):
logger.error(f"Exception occurred: {exception}", exc_info=True)
接下來,我們需要將這個Middleware添加到settings.py
的Middleware配置中:
backend/settings.py
MIDDLEWARE = [
"django.middleware.security.SecurityMiddleware",
"django.contrib.sessions.middleware.SessionMiddleware",
"django.middleware.common.CommonMiddleware",
"django.middleware.csrf.CsrfViewMiddleware",
"django.contrib.auth.middleware.AuthenticationMiddleware",
"django.contrib.messages.middleware.MessageMiddleware",
"django.middleware.clickjacking.XFrameOptionsMiddleware",
'backend.middleware.ExMiddleware', # Add this one
]
跨來源資源共享(CORS)是一種機制,它使用額外的HTTP頭來告訴瀏覽器允許一個網頁從另一個域加載資源。這對於前後端分離的應用非常重要,因為它可以確保API只被信任的來源訪問,從而提高應用的安全性。
首先,我們需要安裝django-cors-headers
庫並更新依賴:
requirements.txt
django-cors-headers>=3.10.0
然後重新構建Docker容器以下載新的依賴:
docker-compose -f docker-compose-local.yml down
docker-compose -f docker-compose-local.yml up --build -d
接下來,更新全局設置以配置CORS:
backend/settings.py
INSTALLED_APPS = [
...
'corsheaders',
...
]
MIDDLEWARE = [
...
# need before CommonMiddleware
'corsheaders.middleware.CorsMiddleware',
'django.middleware.common.CommonMiddleware',
...
]
# Set frontend port like below
CORS_ALLOWED_ORIGINS = [
'http://localhost:3000',
'http://127.0.0.1:3000',
]
在這篇文章中,我們學習了如何設置Logger系統來記錄應用程序的運行狀況和錯誤信息,如何使用Middleware來統一管理請求和響應,並且配置了CORS以確保API的安全性。通過這些設置,我們的Django項目變得更加健壯和安全。在下一篇文章中,將教會讀者如何設置Nginx和為正式環境部署需要進行的一些前置設定: