文章

Django - `settings.py` 文件的各項配置

以下是 Django 項目中 settings.py 文件的各項配置及其含義介紹:


1. 基本配置

BASE_DIR

  • 定義專案的基礎目錄。
  • 用於生成專案中相對路徑。
  • 典型定義:
    1
    
    BASE_DIR = Path(__file__).resolve().parent.parent
    

SECRET_KEY

  • 專案的加密密鑰,用於加密會話資料和密碼。
  • 需保密,特別是在生產環境中。
  • 例:
    1
    
    SECRET_KEY = 'your-secret-key'
    

DEBUG

  • 是否啟用調試模式:
    • True:啟用,顯示詳細的錯誤報告(開發環境)。
    • False:禁用,提升安全性(生產環境)。
      1
      
      DEBUG = True
      

ALLOWED_HOSTS

  • 定義允許訪問的主機列表。
  • 空列表允許任何主機(僅在 DEBUG=True 時有效)。
  • 範例:
    1
    
    ALLOWED_HOSTS = ['localhost', '127.0.0.1', 'yourdomain.com']
    

2. 應用與中介軟體

INSTALLED_APPS

  • 註冊 Django 和第三方應用的列表。
  • 預設應用:
    1
    2
    3
    4
    5
    6
    7
    8
    
    INSTALLED_APPS = [
        'django.contrib.admin',          # 管理後台
        'django.contrib.auth',           # 用戶認證
        'django.contrib.contenttypes',   # 支援內容類型
        'django.contrib.sessions',       # 會話支持
        'django.contrib.messages',       # 消息框架
        'django.contrib.staticfiles',    # 靜態文件管理
    ]
    

MIDDLEWARE

  • 定義中介軟體的列表,處理請求與響應的各個階段。
  • 預設中介軟體範例:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    MIDDLEWARE = [
        'django.middleware.security.SecurityMiddleware',          # 安全相關
        'django.contrib.sessions.middleware.SessionMiddleware',   # 會話支持
        'django.middleware.common.CommonMiddleware',              # 通用功能
        'django.middleware.csrf.CsrfViewMiddleware',              # 防範 CSRF
        'django.contrib.auth.middleware.AuthenticationMiddleware',# 用戶認證
        'django.contrib.messages.middleware.MessageMiddleware',   # 消息框架
        'django.middleware.clickjacking.XFrameOptionsMiddleware', # 防範點擊劫持
    ]
    

3. URL 和 WSGI 配置

ROOT_URLCONF

  • 指定專案的 URL 配置模組。
  • 預設值:
    1
    
    ROOT_URLCONF = 'myproject.urls'
    

WSGI_APPLICATION

  • 指定專案的 WSGI 應用入口。
  • 用於部署 Django。
  • 預設值:
    1
    
    WSGI_APPLICATION = 'myproject.wsgi.application'
    

4. 資料庫

DATABASES

  • 定義專案使用的資料庫。
  • 預設為 SQLite:
    1
    2
    3
    4
    5
    6
    
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.sqlite3',  # 資料庫引擎
            'NAME': BASE_DIR / 'db.sqlite3',        # 資料庫名稱
        }
    }
    
  • 更換為 PostgreSQL:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.postgresql',
            'NAME': 'mydatabase',
            'USER': 'myuser',
            'PASSWORD': 'mypassword',
            'HOST': 'localhost',  # 或資料庫伺服器地址
            'PORT': '5432',       # PostgreSQL 預設端口
        }
    }
    

5. 語言與時區

LANGUAGE_CODE

  • 預設語言代碼。
  • 範例:
    1
    2
    
    LANGUAGE_CODE = 'en-us'  # 英文(美國)
    LANGUAGE_CODE = 'zh-hant'  # 繁體中文
    

TIME_ZONE

  • 預設時區。
  • 範例:
    1
    2
    
    TIME_ZONE = 'UTC'       # 協調世界時間
    TIME_ZONE = 'Asia/Taipei'  # 台北時間
    

USE_I18N

  • 是否啟用國際化支持(多語言功能)。
    1
    
    USE_I18N = True
    

USE_TZ

  • 是否啟用時區支持。
    1
    
    USE_TZ = True
    

6. 靜態與媒體文件

STATIC_URL

  • 設定靜態文件的 URL 前綴。
    1
    
    STATIC_URL = '/static/'
    

STATICFILES_DIRS

  • 定義靜態文件所在的附加目錄列表。
    1
    
    STATICFILES_DIRS = [BASE_DIR / 'static']
    

MEDIA_URLMEDIA_ROOT

  • 配置媒體文件的 URL 和存放目錄。
    1
    2
    
    MEDIA_URL = '/media/'
    MEDIA_ROOT = BASE_DIR / 'media'
    

7. 日誌與其他配置

LOGGING

  • 定義日誌配置。
  • 範例:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    
    LOGGING = {
        'version': 1,
        'disable_existing_loggers': False,
        'handlers': {
            'console': {
                'class': 'logging.StreamHandler',
            },
        },
        'root': {
            'handlers': ['console'],
            'level': 'DEBUG',
        },
    }
    

DEFAULT_AUTO_FIELD

  • 用於指定自動生成主鍵的字段類型。
    1
    
    DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
    

這些配置項目是 settings.py 的基礎內容,根據專案需求可以進一步擴展和調整,例如添加第三方庫的設置或自定義配置項目。

本文章以 CC BY 4.0 授權