本文首發於公眾號:Hunter後端 原文鏈接:Django筆記三十九之settings配置介紹 這一篇筆記介紹 Django 里 settings.py 里一些常用的配置項,這些配置有一些是在之前的筆記中有過介紹的,比如 logging 的日誌配置,session 的會話配置等,這裡就只做一下簡單的 ...
本文首發於公眾號:Hunter後端
這一篇筆記介紹 Django 里 settings.py 里一些常用的配置項,這些配置有一些是在之前的筆記中有過介紹的,比如 logging 的日誌配置,session 的會話配置等,這裡就只做一下簡單的回顧,有一些是之前沒有介紹過的就著重介紹一下。
以下是本篇筆記目錄:
- 郵箱配置
- 允許訪問地址配置
- 資料庫配置
- 調試模式配置
- 註冊應用程式配置
- 時區時間配置
- 會話配置
- 其他配置
1、郵箱配置
在前一篇筆記發送郵件的介紹中,有過詳細的介紹,比如 EMAIL_BACKEND,EMAIL_HOST 等,這裡額外再介紹一個參數 ADMINS
。
這個參數其實在第三十篇筆記 log 日誌記錄中有過介紹,當我們設置的日誌發送郵件模塊有指定等級的日誌發生時,會將郵件發送至 ADMINS 中定義的收件人列表。
這個參數是一個列表,每個元素也是一個元組或列表,第一個參數為收件人的名稱,第二個為收件人郵箱:
ADMINS = [
("Hunter", "[email protected]"),
]
2、允許訪問地址配置
我們的系統是可以設置允許訪問的地址的,可以設置功能變數名稱或者 IP,比如:
ALLOWED_HOSTS = ["192.168.1.9"]
這個參數的預設值為空列表,則說明只允許該系統所在的伺服器地址的其他服務可以訪問到 Django 服務。
如果想設置所有地址都可以訪問到我們的服務,可以如此設置:
ALLOWED_HOSTS = ["*"]
3、資料庫配置
前面連接資料庫的時候,沒有做過多的介紹,都是直接使用,這裡再做一下詳細的介紹,以下是一個示例:
DATABASES = {
'default': {
'ENGINE': "django.db.backends.mysql",
"HOST": "192.168.1.31",
'NAME': "func_test",
"USER": "root",
"PASSWORD": "123456",
"PORT": 3306,
"OPTIONS": {},
"TEST": {},
},
}
在 DATABASES 中,必須設置一個 default 資料庫,也可以在裡面添加其他資料庫連接,比如之前的多資料庫連接操作的筆記示例
其中,ENGINE 表示連接的資料庫類型,這裡我們設置的是 MySQL,也可以設置成 postgresql,oracle,sqlite3。
這裡我們連接使用的都是 MySQL,所以下麵的配置項都是基於 MySQL 做的介紹。
HOST 表示連接資料庫的主機
NAME 表示要使用的資料庫名稱,比如我們這裡 MySQL 的 func_test。如果使用的是 SQLite,那麼這個地址應該是一個完整路徑,下麵是一個使用 SQLite 作為資料庫的示例:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': '/Users/hunter/…/sqlite3.db'
}
}
USER 表示的是連接 MySQL 用到的用戶名
PASSWORD 則是密碼
PORT MySQL 一般是 3306,如果是映射的其他埠改成其他埠即可
CONN_MAX_AGE
還有一個參數為 CONN_MAX_AGE,表示一個資料庫連接的壽命,以秒為整數,預設為 0,表示每次資料庫請求結束之後即關閉資料庫連接。
如果設置為 60,那麼資料庫連接在開啟之後 60s 即關閉此連接,在此期間,其他請求可以復用此連接。
如果設置為 None,則表示一直處於連接狀態。
OPTIONS
是用於添加連接資料庫時額外的參數,比如我們的 MySQL 的連接配置不直接在 DATABASES 中定義,而是通過配置文件的方式使用,如下官方文檔的一個使用示例:
# settings.py
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'OPTIONS': {
'read_default_file': '/path/to/my.cnf',
},
}
}
# my.cnf
[client]
database = NAME
user = USER
password = PASSWORD
default-character-set = utf8
這裡的意思是,DATABASES 里的 default 資料庫連接使用的都是 my.cnf 里的配置選項
如果同時我們在 DATABASES["default"] 中也配置了 NAME,USER,PASSWORD 等參數,連接應該以哪個為準呢?
是以 OPTIONS 里的參數為準,這裡預設的讀取配置順序是 OPTIONS > NAME, USER, PASSWORD, HOST, PORT
我們還可以在 OPTIONS 里設置資料庫的隔離等級:
* 'read uncommitted' 讀未提交
* 'read committed' 讀已提交
* 'repeatable read' 可重覆讀
* 'serializable' 串列化
TEST
TEST 參數預設也是一個空 dict,之前在單元測試那篇筆記中有過介紹,可以設置測試資料庫的字元集編碼,指定測試資料庫名稱等信息,示例如下:
DATABASES = {
'default': {
...
"TEST": {
"CHARSET": "utf8",
"NAME": "test_default_db",
},
}
}
4、調試模式配置
我們通過 settings 中的 DEBUG 參數來控制 Django 系統是否處於調試模式,DEBUG=True
則表示系統處於調試模式。
註意:永遠不要在 DEBUG=True 的情況下將網站部署到生產環境
調試模式的主要功能之一就是顯示詳細的錯誤頁面,比如在 DEBUG=True 的情況下,如果我們的介面發生異常,Django會顯示一個詳細的回溯,比如下麵的信息:
而如果我們設置 DEBUG=False,顯示的信息就會如下:
返回給前臺的就是一個簡單的錯誤頁面,而不是像上面一樣暴露出詳細的文件路徑和錯誤信息
5、註冊應用程式配置
INSTALLED_APPS,列表參數,元素是在這個 Django 系統中被啟用的應用程式。
這個參數包含了 Django 系統初始化時候的一些配置類應用程式,比如 django.contrib.admin, django.contrib.sessions 等
也包含我們創建的 application,比如我們創建了一個名為 blog 的 application,就可以在其中添加 'blog.apps.BlogConfig' 才可以被系統檢測到
6、時區時間配置
時區的設置與 settings.py 里的兩個參數相關,一個是 TIME_ZONE,一個是 USE_TZ
TIME_ZONE 表示是時區,USE_TZ 表示是否預設是使用時區感知
我們獲取當前時間有兩個方式,一個是通過 datetime,一個是通過 django.utils.timezone 獲取:
import datetime
print(datetime.datetime.now())
from django.utils import timezone
print(timezone.now())
如果設置 USE_TZ = True
,不管 TIME_ZONE 設置的時區是哪個,timezone.now() 輸出的永遠是 UTC 時間,也就是格林威治時間,也就是比我們現在要早八個小時的時間
而 datetime.datetime.now() 則是會根據 TIME_ZONE設置的時區顯示時間,比如設置為 “Ameraica/Chicago” 則會比格林威治時間早六個小時,比我們當前時間早14個小時
但是我們存儲到資料庫的時間是使用 timezone 的時間的,所以這個設置不太對的。
如果想要存儲到資料庫的時間和我們本地的時間一致,我們需要設置 USE_TZ 為 False,且設置 TIME_ZONE 的值為我們當前時區東八區的時區,這樣,這兩個輸出的時間值就一致了,且資料庫中存儲的值也是與我們當前時間一致:
# settings.py
TIME_ZONE = "Asia/Shanghai"
USE_TZ = False
import datetime
from django.utils import timezone
print(datetime.datetime.now())
print(timezone.now())
# 2023-02-26 22:33:00.442966
# 2023-02-26 22:33:00.442982
7、會話配置
session 相關的配置在第三十二篇筆記的時候有過詳細介紹,這裡只做一個索引介紹
SESSION_COOKIE_AGE
session 過期時間,以秒為單位
SESSION_COOKIE_NAME
用於會話的 cookie 的名稱,預設為 sessionid,可在 settings.py 中自定義修改
SESSION_ENGINE
控制 Django 存儲會話數據的地方,預設值為 'django.contrib.sessions.backends.db',也就是資料庫,django_session 這張表。
我們還在緩存那篇筆記中有過介紹如何將 session 存儲到 Redis 緩存中,這裡不重覆介紹了。
8、其他配置
還有一些配置,比如 日誌配置 LOGGING,中間件配置 MIDDLEWARE 等,都在日誌筆記,中間件筆記中都有過介紹,這裡就不再贅述了。
這裡介紹一下如何訪問 settings 中的配置,可以通過文件路徑的形式訪問,也可以通過 django.conf 訪問:
from hunter import settings
print(settings.DATABASES)
from django.conf import settings
print(settings.DATABASES)
這裡,hunter 為我們系統的名稱,所以在系統根目錄下,hunter/ 也是 settings.py 文件的上層文件夾。
如果想獲取更多後端相關文章,可掃碼關註閱讀: