iT邦幫忙

0

[DAY7] Django與Docker Compose後端開發實戰 - 建立Logger系統、Middleware和CORS

  • 分享至 

  • xImage
  •  

在上一篇文章中,我們學習了如何設置Django Admin管理系統和整合Swagger來更方便地進行API文檔和測試。

[DAY6] Django與Docker Compose後端開發實戰 - 設置Admin管理系統與整合Swagger

本篇文章中,我們將探討如何建立Logger系統、Middleware,以及如何配置CORS,以確保API的安全性和性能。

建立Logger系統

Logger系統在應用開發中非常重要,因為它允許我們記錄應用程序的運行狀況、錯誤信息和其他重要事件。這些日誌信息對於調試、監控和維護應用程序至關重要。通過記錄日誌,我們可以更快地定位問題,並確保應用程序按預期運行。

配置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',
        },
    }
}

使用Logger

然後我們可以在其他地方設置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

Middleware是Django的一個輕量級插件,用於在請求和響應之間進行處理。它允許我們在處理請求之前和響應之後執行特定的操作,例如日誌記錄、性能分析、修改請求和響應等。使用Middleware,我們可以統一管理和處理應用程序中的各種操作,提升代碼的可維護性和重用性。

設置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

跨來源資源共享(CORS)是一種機制,它使用額外的HTTP頭來告訴瀏覽器允許一個網頁從另一個域加載資源。這對於前後端分離的應用非常重要,因為它可以確保API只被信任的來源訪問,從而提高應用的安全性。

設置CORS

首先,我們需要安裝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和為正式環境部署需要進行的一些前置設定:

[DAY8] Django與Docker Compose後端開發實戰 - 建立Nginx與正式環境配置


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言