Django中的settings.py文件使用全解析
本篇詳細(xì)介紹 Django settings.py 文件各個(gè)配置項(xiàng)的教程,涵蓋核心配置項(xiàng)的作用及最佳實(shí)踐
一、基礎(chǔ)配置
1. ?BASE_DIR
BASE_DIR = Path(__file__).resolve().parent.parent
- ?作用:項(xiàng)目根目錄路徑,用于構(gòu)建其他路徑(如模板、靜態(tài)文件路徑)
- ^注意:使用 Path 對(duì)象更安全,替代傳統(tǒng)的 os.path.dirname()
2. ?SECRET_KEY
SECRET_KEY = 'django-insecure-xxxxxxxx'
?作用:用于加密簽名(Session、密碼重置等)
安全建議:
- 永遠(yuǎn)不要提交到版本控制
- 生產(chǎn)環(huán)境使用環(huán)境變量加載:
import os SECRET_KEY = os.environ.get('DJANGO_SECRET_KEY')
3.DEBUG
DEBUG = True
- ?作用:開啟調(diào)試模式(顯示詳細(xì)錯(cuò)誤頁面)
- 生產(chǎn)環(huán)境必須關(guān)閉:
DEBUG = False
4. ALLOWED_HOSTS
ALLOWED_HOSTS = ['example.com', '127.0.0.1']
- ?作用:允許訪問的域名/IP白名單
- ?開發(fā)環(huán)境配置:
ALLOWED_HOSTS = ['*'] # 僅限開發(fā)環(huán)境!
二、應(yīng)用與中間件
1. ?INSTALLED_APPS
# 注冊內(nèi)置、第三方、自己寫的app INSTALLED_APPS = [ 'django.contrib.admin', # 管理后臺(tái) 'django.contrib.auth', # 認(rèn)證系統(tǒng) 'django.contrib.contenttypes', # 提供 ?通用模型關(guān)系系統(tǒng),允許任意模型之間建立動(dòng)態(tài)關(guān)聯(lián) 'django.contrib.sessions', # 會(huì)話管理 'django.contrib.messages', # 提供 ?一次性消息傳遞系統(tǒng),用于在頁面跳轉(zhuǎn)間臨時(shí)存儲(chǔ)提示信息(如操作成功/失敗提示) 'django.contrib.staticfiles', # 靜態(tài)文件處理 'myapp.apps.MyAppConfig', # 自定義應(yīng)用 'rest_framework', # 第三方應(yīng)用 ]
2. ?MIDDLEWARE
# 注冊內(nèi)置、第三方、自己寫的中間件 MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', # 安全相關(guān)頭信息 'django.contrib.sessions.middleware.SessionMiddleware', # 會(huì)話管理 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', # CSRF保護(hù) 'django.contrib.auth.middleware.AuthenticationMiddleware', 用戶認(rèn)證 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', ]
三、數(shù)據(jù)庫配置
1. ?DATABASES
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql', 'NAME': 'mydatabase', 'USER': 'mydbuser', 'PASSWORD': 'mypassword', 'HOST': 'localhost', 'PORT': '5432', } }
支持的數(shù)據(jù)庫引擎:
- sqlite3:輕量級(jí)本地?cái)?shù)據(jù)庫(開發(fā)用)
- postgresql:PostgreSQL
- mysql:MySQL
- oracle:Oracle
2. ?使用環(huán)境變量(生產(chǎn)推薦)?
import os DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql', 'NAME': os.getenv('DB_NAME'), 'USER': os.getenv('DB_USER'), 'PASSWORD': os.getenv('DB_PASSWORD'), 'HOST': os.getenv('DB_HOST'), 'PORT': os.getenv('DB_PORT'), } }
四、靜態(tài)文件與媒體文件
1. ?STATIC_URL & STATIC_ROOT
STATIC_URL = '/static/' # 訪問URL前綴 STATIC_ROOT = BASE_DIR / 'staticfiles' # collectstatic收集目錄 STATICFILES_DIRS = [ # 額外靜態(tài)文件目錄 BASE_DIR / 'static', ]
2. MEDIA_URL & MEDIA_ROOT
MEDIA_URL = '/media/' # 用戶上傳文件訪問路徑 MEDIA_ROOT = BASE_DIR / 'media' # 文件存儲(chǔ)路徑
五、模板配置
1. TEMPLATES
TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [BASE_DIR / 'templates'], # 模板搜索路徑 'APP_DIRS': True, # 是否搜索應(yīng)用內(nèi)的templates目錄 'OPTIONS': { 'context_processors': [ 'django.template.context_processors.debug', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', ], }, }, ]
六、國際化配置
1. 語言與時(shí)區(qū)
LANGUAGE_CODE = 'zh-hans' # 中文 TIME_ZONE = 'Asia/Shanghai' USE_I18N = True # 啟用國際化 USE_TZ = True # 使用時(shí)區(qū)
2. 多語言支持
LOCALE_PATHS = [BASE_DIR / 'locale'] # 翻譯文件目錄
七、安全配置(生產(chǎn)必須)
1. HTTPS 設(shè)置
SECURE_SSL_REDIRECT = True # 強(qiáng)制HTTPS SESSION_COOKIE_SECURE = True # 安全Cookie CSRF_COOKIE_SECURE = True # CSRF Cookie加密 SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')
2. 安全頭信息
SECURE_CONTENT_TYPE_NOSNIFF = True SECURE_BROWSER_XSS_FILTER = True X_FRAME_OPTIONS = 'DENY' # 防止點(diǎn)擊劫持
八、高級(jí)配置
1. 緩存配置
CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.redis.RedisCache', 'LOCATION': 'redis://127.0.0.1:6379/1', } }
2. 郵件配置
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' EMAIL_HOST = 'smtp.example.com' EMAIL_PORT = 587 EMAIL_USE_TLS = True EMAIL_HOST_USER = 'user@example.com' EMAIL_HOST_PASSWORD = 'password'
九、最佳實(shí)踐
1.環(huán)境分離:使用多個(gè)配置文件
settings/ ├── base.py ├── development.py └── production.py
2. 敏感信息管理:使用 python-dotenv
from dotenv import load_dotenv load_dotenv()
3. ?性能優(yōu)化:
DATABASES['default']['CONN_MAX_AGE'] = 300 # 數(shù)據(jù)庫連接池
拓展:
通過合理配置 settings.py,您可以:
- 確保開發(fā)與生產(chǎn)環(huán)境的安全隔離
- 優(yōu)化Web應(yīng)用性能
- 靈活擴(kuò)展功能(如緩存、郵件服務(wù))
- 實(shí)現(xiàn)多語言支持與國際化部署
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Django 權(quán)限管理(permissions)與用戶組(group)詳解
這篇文章主要介紹了Django 權(quán)限管理(permissions)與用戶組(group)詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11python中elasticsearch_dsl模塊的使用方法
這篇文章主要介紹了python中elasticsearch_dsl模塊的使用方法,elasticsearch-dsl是基于elasticsearch-py封裝實(shí)現(xiàn)的,提供了更簡便的操作elasticsearch的方法2022-09-09解決python3讀取Python2存儲(chǔ)的pickle文件問題
今天小編就為大家分享一篇解決python3讀取Python2存儲(chǔ)的pickle文件問題,具有很好的參考價(jià)值。希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-10-10Python 2種方法求某個(gè)范圍內(nèi)的所有素?cái)?shù)(質(zhì)數(shù))
這篇文章主要介紹了Python 2種方法求某個(gè)范圍內(nèi)的所有素?cái)?shù)(質(zhì)數(shù)),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-01-01Python對(duì)FTP交互封裝的實(shí)現(xiàn)
本文主要介紹了Python對(duì)FTP交互封裝的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-06-06