文章目錄
- 5 數據庫配置
- 5.1 常用配置項
- 5.2 數據庫配置示例
- 5.3 其它數據庫配置選項
- 6 緩存
- 6.1 常用配置項
- 6.2 內置的緩存后端
- 6.3 緩存配置示例
- 6.4 緩存中間件的配置
創建django項目后,會自動生成初始的項目文件如下:
manage.py # 管理django項目的命令行工具
django_pro/ # 項目的python包__init__.py # 表示當前文件夾是一個python包settings.py # 項目的配置文件urls.py # 項目的URL聲明asgi.py # 項目運行在兼容ASGI的web服務器上的入口wsgi.py # 項目運行在兼容WSGI的web服務器上的入口
settings.py
文件包含了項目的基礎配置。以下是數據庫配置和緩存配置的內容。
settings.py
可選的全部配置見:django配置
5 數據庫配置
DATABASES
用于配置項目使用的數據庫連接信息。
DATABASES = {'default': {'ENGINE': 'django.db.backends.sqlite3','NAME': BASE_DIR / 'db.sqlite3',}
}
DATABASES
是字典,字典的鍵是數據庫的別名,值是包含數據庫連接參數的字典。'default'
鍵是必須有的。
一個django項目可以配置多個數據庫,適用于讀寫分離、分庫的場景。
5.1 常用配置項
ENGINE
指定數據庫后端NAME
數據庫的名稱,對與SQLite是文件路徑USER
連接數據庫的用戶名PASSWORD
連接數據庫的密碼HOST
數據庫服務器的主機地址,默認使用本地連接PORT
數據庫服務器的端口號,默認使用數據庫的默認端口OPTIONS
額外的數據庫連接選項,字典格式ATOMIC_REQUESTS
是否把每個HTTP請求包裝子啊一個數據庫事務中。
為True時,每個請求都會開啟一個事務,請求成功則提交,失敗則回滾。CONN_MAX_AGE
數據庫連接的最大存活時間
為0表示每次請求后關閉連接,為None表示一致保持連接。TEST
配置測試數據庫的參數
5.2 數據庫配置示例
SQLite
DATABASES = {'default': {'ENGINE': 'django.db.backends.sqlite3','NAME': BASE_DIR / 'db.sqlite3',}
}
PostgreSQL
DATABASES = {'default': {'ENGINE': 'django.db.backends.postgresql','NAME': 'mydatabase','USER': 'myuser','PASSWORD': 'mypassword','HOST': 'localhost','PORT': '5432',}
}
MySQL
DATABASES = {'default': {'ENGINE': 'django.db.backends.mysql','NAME': 'mydatabase','USER': 'myuser','PASSWORD': 'mypassword','HOST': 'localhost','PORT': '3306','OPTIONS': {'charset': 'utf8mb4',},}
}
5.3 其它數據庫配置選項
DATABASE_ROUTERS
使用數據庫路由器。
數據庫路由器需要自己定義。用于指定應用使用哪一個數據庫配置。DEFAULT_TABLESPACE
對未指定表空間的模型,使用默認表空間。DEFAULT_INDEX_TABLESPACE
對未指定索引的字段上使用默認表空間。PostgreSQL和Oracle支持表空間,可用于優化數據庫表現。
DEFAULT_AUTO_FIELD
默認的主鍵字段類型
默認值為'django.db.models.AutoField'
,用于無主鍵模型。
6 緩存
CACHES
用于配置項目使用的緩存。它是一個嵌套的字典,把緩存別名映射到單個緩存選項。
CACHES
配置也必須有一個default
選項,它的默認值為:
{"default": {"BACKEND": "django.core.cache.backends.locmem.LocMemCache",}
}
6.1 常用配置項
BACKEND
使用哪個后端進行緩存
可以使用內置的緩存后端,也可以寫為緩存后端類的點分隔路徑。LOCATION
緩存位置。
可以是文件系統緩存的目錄,緩存服務器的主機和端口,或本地內存緩存的識別名稱。KEY_FUNCTION
由點分隔路徑指定的函數,該函數定義如何將前綴、版本和密鑰組成緩存密鑰。KEY_PREFIX
自動包含在所有緩存鍵中的字符串。OPTIONS
傳遞給緩存后端的額外參數。TIMEOUT
緩存的過期時間,默認為300,單位秒。VERSION
緩存密鑰的默認版本號。
6.2 內置的緩存后端
django.core.cache.backends.locmem.LocMemCache
本地內存緩存。
簡單快速,一般用在開發環境。多進程時無效,適合單機調試。django.core.cache.backends.filebased.FileBasedCache
文件緩存。
性能低,適合小項目或無法使用內存緩存或數據庫緩存的場景。django.core.cache.backends.db.DatabaseCache
數據庫緩存。
性能一般,適合沒有Redis或Memcached緩存但是又需要持久化的場景。
需要先創建緩存表。django.core.cache.backends.dummy.DummyCache
虛擬緩存。
僅實現緩存接口,但不實際存儲數據。適合測試或禁用緩存。django.core.cache.backends.memcached.PyMemcacheCache
Memcached緩存,使用python-memcached
庫。
Memcached緩存是高性能分布式緩存,支持服務器集群,適合生產環境。django.core.cache.backends.memcached.PyLibMCCache
Memcached緩存,使用pylibmc
庫。django.core.cache.backends.redis.RedisCache
Redis緩存,需安裝redis
庫。
高性能,支持持久化。安裝三方庫
django-redis
后,可以使用django_redis.cache.RedisCache
做為Redis緩存后端。
6.3 緩存配置示例
內存緩存
CACHES = {'default': {'BACKEND': 'django.core.cache.backends.locmem.LocMemCache','LOCATION': 'unique-snowflake','TIMEOUT': 3600,'OPTIONS': {'MAX_ENTRIES': 1000,}}
}
文件緩存
CACHES = {'default': {'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache','LOCATION': '/var/tmp/django_cache','TIMEOUT': 3600,}
}
數據庫緩存
CACHES = {'default': {'BACKEND': 'django.core.cache.backends.db.DatabaseCache','LOCATION': 'my_cache_table', # 數據庫表名}
}
Redis緩存,使用三方庫django-redis
CACHES = {"default": {"BACKEND": "django_redis.cache.RedisCache","LOCATION": "redis://192.168.32.130:6379","OPTIONS": {"CLIENT_CLASS": "django_redis.client.DefaultClient","CONNECTION_POOL_KWARGS": {"max_connections": 100},"DECODE_RESPONSES":True,"PASSWORD": "root",}}
}
Redis緩存,django本身和redis
庫的綁定
CACHES = {"default": {"BACKEND": "django.core.cache.backends.redis.RedisCache","LOCATION": "redis://username:password@127.0.0.1:6379",}
}
Memcached緩存
CACHES = {'default': {'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache','LOCATION': '127.0.0.1:11211', # Memcached 服務器地址}
}
虛擬緩存
CACHES = {'default': {'BACKEND': 'django.core.cache.backends.dummy.DummyCache',}
}
6.4 緩存中間件的配置
MIDDLEWARE
設置時,可以設置django內置的兩個中間件用于緩存站點頁面:
django.middleware.cache.UpdateCacheMiddleware
在請求階段從緩存中獲取頁面。django.middleware.cache.FetchFromCacheMiddleware
在響應階段緩存頁面。
注意 由于中間件執行順序的原因,
UpdateCacheMiddleware
必須放在MIDDLEWARE
列表的第一位,FetchFromCacheMiddleware
必須放在列表最后一位。
設置緩存中間件后,可以在settings.py
文件操作以下配置:
CACHE_MIDDLEWARE_ALIAS
用于緩存中間件的緩存鏈接,默認'default'
CACHE_MIDDLEWARE_KEY_PREFIX
緩存中間件生成的緩存密鑰的前綴字符串CACHE_MIDDLEWARE_SECONDS
緩存中間件緩存每個頁面的秒數,默認600。