Django的默認配置文件中,包含上百條配置項目,其中不少是咱們‘一生’都不碰到或者不須要單獨配置的,這些項目在須要的時候再去查手冊。css
強調:配置的默認值不是在settings.py文件中!不要覺得settings.py
中的配置值就是默認值,參考前文。settings.py
是使用django-admin startproject xxx
命令時,額外給咱們建立的。html
下面介紹的是61個相對比較經常使用和重要的配置項,按字母順序排序,可是最後部分是cache、auth、message、session、static等的配置。python
默認值:[](空列表)mysql
全部得到代碼錯誤通知的人的郵件地址列表。當DEBUG=False,而且一個視圖引起了異常時,Django將會給這個列表裏的人發一封含有完整異常信息的電子郵件。列表中的每一個項目都應該是(全名,電子郵件地址)的元組。例如:web
[('John', 'john@example.com'), ('Mary', 'mary@example.com')]
默認值:[](空列表)正則表達式
這是新手比較困惑的一個配置項。該配置項列表中包含的是Django站點能夠爲之提供服務的主機/域名。 也就是哪些主機或IP可以訪問Django服務器!列表裏的全部元素是共同存在的關係,不純在衝突、優先級和排斥的關係。算法
列表中的值能夠是'localhost'、'www.example.com'或者'.example.com'形式的域名。sql
也能夠是IP地址,好比:'137.2.4.1'、'192.168.1.1'、'0.0.0.0'、'127.0.0.1'數據庫
還能夠是通配符'*',表示全部外部主機均可以訪問Django。但這種狀況具備安全風險,在線上環境不要使用。django
對於'0.0.0.0',表示局域網內的主機均可以訪問Django。
當DEBUG爲True和'ALLOWED_HOSTS爲'空時,默認至關於配置:['localhost', '127.0.0.1', '[:: 1]']。
默認值:True
當設定爲True時,若是請求的URL沒有匹配到URLconf裏面的任何一條URL路由設置,而且沒有以'/'(斜槓)結束,該請求將重定向到以請求URL加'/'的URL地址。須要注意的是重定向有可能致使POST提交的數據丟失。
通俗的解釋就是,若是你在寫url時忘記了在最後添加一個斜槓,Django會默認幫你加上!請儘可能保持默認值!
'APPEND_SLASH'設置只有在安裝了'CommonMiddleware'中間件時纔會啓用。
如:默認是(127.0.0.1:8000/路徑),設置爲true(127.0.0.1:8000路徑)
默認值: {} (空的字典)
該配置項包含Django項目使用的全部數據庫的設置。這是一個嵌套字典。
DATABASES設置必須配置一個default數據庫,以及指定任意數量的其它數據庫(能夠沒有)。
最簡單的配置方式是使用SQLite數據庫,Python和Django內置對SQLite數據庫的支持,無需任何額外的安裝和插件,以下所示:
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': 'mydatabase', # 或者'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), } }
因爲SQLite數據庫就在Django項目本地,一般仍是在Django項目根目錄下,以一個文件的形式存在,沒有用戶名、密碼、IP、port的問題,因此配置比較簡單。
當鏈接其餘數據庫後端,好比MySQL、Oracle 或PostgreSQL,必須提供更多的鏈接參數。下面的例子用於PostgreSQL:
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql', 'NAME': 'mydatabase', 'USER': 'mydatabaseuser', 'PASSWORD': 'mypassword', 'HOST': '127.0.0.1', 'PORT': '5432', } }
下面是DATABASES的內部配置項:
默認值:False
原子性事務請求。
默認值:True
自動提交。
默認值:''(空字符串)
最重要的配置項!指定使用的數據庫後端。 內建的數據庫後端名稱有:
'django.db.backends.postgresql' 'django.db.backends.mysql' 'django.db.backends.sqlite3' 'django.db.backends.oracle'
默認值:''(空字符串)
數據庫所在的主機。設置的值能夠是主機名、IP地址、和socket路徑。空字符串表示localhost。SQLite不須要配置這個選項。
若是其值以斜槓('/')開頭而且你使用的是MySQL,MySQL將經過Unix socket鏈接。 像這樣:
"HOST": '/var/run/mysql'
默認值:''(空字符串)
使用的數據庫名稱。 對於SQLite,它是數據庫文件的完整路徑。指定路徑時,請始終使用前向的斜槓,即便在Windows 上(例如:'C:/homes/user/mysite/sqlite3.db')。
可是對於MySQL等數據庫,NAME指的是數據庫系統中的具體某個database,Django沒有能力自動在MySQL中建立數據庫,它只能經過模型建立數據表。因此須要你經過各類數據客戶端,在MySQL中提早建立好Django項目須要的數據庫,使用命令'CREATE DATABASE mysite CHARACTER SET utf8;',mysite是你的數據庫名,務必同時指定字符編碼方式爲utf8!
默認:0
數據庫鏈接的存活時間,以秒爲單位。0表示在每一個請求結束時關閉數據庫鏈接,None表示無限的持久鏈接。
Default: {} (默認爲空的字典)
鏈接數據庫時使用的額外參數。可用的參數與你的數據庫後端有關。
默認值:''(空字符串)
鏈接數據庫時使用的密碼。SQLite不須要這個選項。
默認值:''(空字符串)
鏈接數據庫時使用的端口。空字符串表示默認的端口。SQLite不須要這個選項。 MySQL通常是3306。
默認值:None
數據庫中使用的時區。
默認值:''(空字符串)
鏈接數據庫時使用的用戶名。SQLite不須要這個選項。
Default: {} (默認爲空的字典)
測試數據庫用的配置。
如下是測試數據庫配置的示例:
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql', 'USER': 'mydatabaseuser', 'NAME': 'mydatabase', 'TEST': { 'NAME': 'mytestdatabase', }, }, }
默認值:'N j, Y' (例如:Feb. 4, 2003)
系統中日期字段的默認顯示格式。
默認值:
[ '%Y-%m-%d', '%m/%d/%Y', '%m/%d/%y', # '2006-10-25', '10/25/2006', '10/25/06' '%b %d %Y', '%b %d, %Y', # 'Oct 25 2006', 'Oct 25, 2006' '%d %b %Y', '%d %b, %Y', # '25 Oct 2006', '25 Oct, 2006' '%B %d %Y', '%B %d, %Y', # 'October 25 2006', 'October 25, 2006' '%d %B %Y', '%d %B, %Y', # '25 October 2006', '25 October, 2006' ]
日期字段中輸入數據時將可以被接受的格式列表。格式將按順序嘗試,使用第一個有效的格式。
默認值:'N j, Y, P' (例如Feb. 4, 2003, 4 p.m.)
系統中顯示datetime字段的默認格式。
默認值:
[ '%Y-%m-%d %H:%M:%S', # '2006-10-25 14:30:59' '%Y-%m-%d %H:%M:%S.%f', # '2006-10-25 14:30:59.000200' '%Y-%m-%d %H:%M', # '2006-10-25 14:30' '%Y-%m-%d', # '2006-10-25' '%m/%d/%Y %H:%M:%S', # '10/25/2006 14:30:59' '%m/%d/%Y %H:%M:%S.%f', # '10/25/2006 14:30:59.000200' '%m/%d/%Y %H:%M', # '10/25/2006 14:30' '%m/%d/%Y', # '10/25/2006' '%m/%d/%y %H:%M:%S', # '10/25/06 14:30:59' '%m/%d/%y %H:%M:%S.%f', # '10/25/06 14:30:59.000200' '%m/%d/%y %H:%M', # '10/25/06 14:30' '%m/%d/%y', # '10/25/06' ]
在datetime字段中輸入數據時將被接受的格式列表。格式將按順序嘗試,使用第一個有效的格式。
默認值:False
打開/關閉調試模式。最重要的設置之一!默認值是False,你沒有看錯!只是在settings.py中又幫咱們設置爲True了,打開了調試模式,方便開發者和測試者的!線上部署網站的時候務必設置爲False。
調試模式下能夠顯示錯誤頁面的細節。若你的應用產生了一個異常,Django會顯示追溯細節,包括許多環境變量的元數據, 好比全部當前定義的Django設置。
做爲安全考慮,調試信息中不會列出包含下列關鍵字的配置項的內容,例如SECRET_KEY:
'API' 'KEY' 'PASS' 'SECRET' 'SIGNATURE' 'TOKEN'
注意,這裏使用的是包含匹配,也就是說只要出現這些子字符串的配置項將匹配上。例如'PASS'可以匹配 PASSWORD, 'TOKEN'也將匹配TOKENIZED等等.
最後再次強調,若是DEBUG爲False,你還須要正確設置'ALLOWED_HOSTS'以及靜態文件。錯誤設置將致使對全部的請求返回「Bad Request (400)」。
默認值:'utf-8'
HttpResponse響應對象的默認字符集。
默認值:'text/html'
HttpResponse對象的默認內容類型。
默認值:'webmaster@localhost'
默認的電子郵件發送地址,即發送方。
默認值:[](空列表)
這是一個編譯好了的正則表達式對象的列表。表明哪些不容許訪問任何頁面的User-Agent字符串。也就是說若是一個請求的User-Agent屬性,被這個配置項中的任何一個正則表達式匹配到了,那麼這個請求將被阻止。經常使用於對付機器人和網絡蜘蛛。須要CommonMiddleware中間件支持。
默認值:' django.core.mail.backends.smtp.EmailBackend '
用於發送郵件的後端。
默認:未指定
郵件後端保存輸出文件時使用的目錄。
默認:'localhost'
發送郵件使用的主機。
默認值:''(空字符串)
'EMAIL_HOST'的SMTP服務器使用的密碼。
默認值:''(空字符串)
'EMAIL_HOST'的SMTP服務器使用的用戶名。
默認:25
'EMAIL_HOST'的SMTP服務器使用的端口。
默認值:'[Django] '
使用'django.core.mail.mail_admins'或'django.core.mail.mail_managers'發送的電子郵件的主題行前綴。
默認值:False
是否使用TLS(安全)與SMTP服務器鏈接。用於顯式TLS鏈接,一般在端口587上。
默認值:False
在與SMTP服務器通訊時是否使用隱式TLS(安全)鏈接。在大多數電子郵件文檔中,此類型的TLS鏈接稱爲SSL。 它一般在端口465上使用。
注意:騰訊家的qq郵箱服務,須要使用ssl安全連接在465端口上!
請注意,'EMAIL_USE_TLS'與'EMAIL_USE_SSL'是互斥的,所以只能將其中一個設置設置爲True。
默認值:None
若是'EMAIL_USE_SSL'或'EMAIL_USE_TLS'爲True,則能夠選擇指定要用於SSL鏈接的PEM格式的證書鏈文件的路徑。
默認值:None
若是'EMAIL_USE_SSL'或'EMAIL_USE_TLS爲True',能夠選擇指定要用於SSL鏈接的PEM格式的私鑰文件的路徑。
默認值:None
郵件發送超時時間。
默認值:'utf-8'
從磁盤讀取文件時使用的字符編碼。包括模板文件和初始SQL數據文件。
沒有特別需求,請不要修改它。
默認值:[](空列表)
Django核心配置項!
當前Django項目中啓用的app列表。 每一個元素應該是一個Python的點分路徑,字符串格式:
項目內每一個啓用的app,包括Django內置的contrib都必須在這個列表裏註冊,不然建立數據表、調用功能等等都沒法進行。
一個典型的配置以下:
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'app1', 'app2', ]
建議在最後一個元素後面添加個逗號。
默認值:'en-us'
當前項目所使用的語言。默認爲英語。漢語是'zh-hans',千萬不要寫成別的,好比‘chinese’之類!
'USE_I18N'必須設置爲True才能使'LANGUAGE_CODE'生效。
默認值:全部可用語言的列表。
該配置項表示可用的語言種類,(語言代碼,語言名稱)兩元組列表,例如:('ja', 'Japanese')。
通常來講,默認值足夠了。若是自定義LANGUAGES設置,可使用'ugettext_lazy()'函數將語言名稱標記爲翻譯字符串。
下面是一個示例設置文件:
from django.utils.translation import ugettext_lazy as _ LANGUAGES = [ ('de', _('German')), ('en', _('English')), ]
默認值:[](空列表)
Django查找翻譯文件的目錄列表,例如:
LOCALE_PATHS = [ '/home/www/project/common_files/locale', '/var/local/translations/locale', ]
Django將在這些路徑中查找包含實際翻譯文件的目錄。
默認值:日誌配置字典。
日誌配置信息。
默認值:'logging.config.dictConfig'
用於在Django項目中配置日誌記錄的可調用項的路徑。
默認值:''(空字符串)
用戶上傳的文件,所在目錄的,文件系統絕對路徑。也就是指示上傳文件放到哪裏。
例如: "/var/www/example.com/media/"
警告:MEDIA_ROOT和STATIC_ROOT必須設置爲不一樣的值。
默認值:''(空字符串)
'MEDIA_URL'指向'MEDIA_ROOT'所指定的media文件,用來管理保存的文件。該URL設置爲非空值時,必須以斜槓「/」結束。
若你打算在模版中使用'{{ MEDIA_URL }}',必須在TEMPLATES的'context_processors'設置中添加'django.template.context_processors.media'。
警告:'MEDIA_URL'和'STATIC_URL'必須設置爲不一樣的值。
默認值:None
Django1.10中的新功能。要使用的中間件列表。Django-admin命令建立的新項目中,settings.py文件裏默認會爲MIDDLEWARE配置項添加一系列Django內置的中間件,咱們保持它不變就行了。
默認:未指定
一個字符串,表示根URLconf的完整Python導入路徑。例如:"mydjangoapps.urls"。
每一個請求均可以覆蓋它,經過設置HTTP請求HttpRequest對象的urlconf屬性。但不是閒的,請不要特別設置,使用默認值就好。
默認值:''(空字符串)
當前Django項目實例的密鑰。用於提供cryptographic簽名,是一個惟一的而且不可預測的值。好比:
SECRET_KEY = '+$*n1_pkko%zaz3!lm8lg208@uj^qy3mcsuy+*ov%ikpvd5$rf'
經過'django-admin startproject xxx'命令建立的項目,會在settings.py中添加隨機生成的'SECRET_KEY'。
若是未設置'SECRET_KEY',Django將沒法啓動。
警告:不要透露該配置項的真實值!
默認值:[](空列表)
Django模板系統相關的配置。列表中每一項都是一個字典類型數據(相似DATABASE配置),能夠配置模板不一樣的功能。
下面是一個例子:
TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'APP_DIRS': True, }, ]
如下選項適用於全部後端。
BACKEND:
默認:未指定
要使用的模板後端。 內置模板後端有:
'django.template.backends.django.DjangoTemplates' 'django.template.backends.jinja2.Jinja2'
經過將BACKEND設置爲徹底限定路徑(即'mypackage.whatever.Backend'),你可使用第三方提供的模板後端。
NAME:
默認值:見下面
此特定模板引擎的別名,一個標識符,用於在某些狀況下指定選擇引擎進行渲染。別名在全部已配置的模板引擎中必須是惟一的。
當沒有提供時,若是後端是'mypackage.whatever.Backend',則其默認名稱爲'whatever'。
DIRS:
默認值:[](空列表)
搜索模版的路徑列表。搜索引擎會按照列表的排列順序查找template資源文件。短路算法,找到即退出,再也不往下找。
APP_DIRS
默認值:False
Templates搜索引擎是否應該在已安裝的app中查找Template源文件。建議保持打開,即設置爲True!
由'django-admin startproject xxx'命令建立的Django項目,其settings.py文件中'APP_DIRS'已經設置爲True了。
OPTIONS:
默認值:{}
傳遞給模板後端的額外參數。 可用參數因模板後端而異。
默認:'America/Chicago'
時區設置。
注意,這個配置項的值不必定要和服務器的時區一致。例如,一個服務器可上可能有多個Django站點,每一個站點都有一個單獨的時區設置。
若是要設爲中國時間,也就是北京時間,請賦值:'TIME_ZONE = 'Asia/Shanghai''。注意是上海,不是北京,囧!
當'USE_TZ'爲False時,它將成爲Django存儲全部日期和時間數據時,使用的時區。 當'USE_TZ'爲True 時,它是Django顯示模板中的時間,解釋表單中的日期,使用的時區。因此,一般咱們都將USE_TZ同時設置爲False!
注:在Windows 環境中,Django不能可靠地交替其它時區。若是你在Windows上運行Django,'TIME_ZONE'必須設置爲與系統時區一致。
默認值:True
這是一個布爾值,指定Django的翻譯系統是否開啓。若是設置爲False,Django會作一些優化,不去加載翻譯機制。
由'django-admin startproject xxx'命令建立的Django項目,其settings.py文件中'USE_I18N'已經設置爲True了。
默認值:False
一個布爾值,用於決定是否開啓數據本地化。若是此設置爲True,例如Django將使用當前語言環境的格式顯示數字和日期。
由'django-admin startproject xxx'命令建立的Django項目,其settings.py文件中'USE_L10N'已經設置爲True了。
默認值:False
一個布爾值,用來指定是否使用指定的時區(TIME_ZONE)的時間。若爲True, 則Django會使用內建的時區的時間;不然, Django將會使用本地的時間。
由'django-admin startproject xxx'命令建立的Django項目,其settings.py文件中'USE_TZ'已經設置爲True了。
若是咱們將TIME_ZONE設置成了Asia/Shanghai, 那麼務必同時將USE_TZ改爲False!
默認值:None
Django的內置服務器(例如runserver)將使用的WSGI應用程序對象的完整Python路徑。
Django使用WSGI協議與外部進行通訊。
由'django-admin startproject xxx'命令建立的Django項目,將自動建立一個簡單的'wsgi.py'模塊,裏面有一個可調用的application變量,WSGI_APPLICATION配置項的值就指向這個application變量。
下面是'wsgi.py'的源碼:
""" WSGI config for mysite project. It exposes the WSGI callable as a module-level variable named ``application``. For more information on this file, see https://docs.djangoproject.com/en/1.11/howto/deployment/wsgi/ """ import os from django.core.wsgi import get_wsgi_application os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings") application = get_wsgi_application()
默認值:
{ 'default': { 'BACKEND': 'django.core.cache.backends.locmem.LocMemCache', } }
一個嵌套字典,包含全部緩存系統要使用的設置。
CACHES設置必須配置一個default緩存,還能夠同時指定任何數量的附加緩存(也能夠沒有)。
如下是重要的內部配置項目:
BACKEND:
默認值:''(空字符串)
要使用的緩存後端。 內置高速緩存後端有:
'django.core.cache.backends.db.DatabaseCache' 'django.core.cache.backends.dummy.DummyCache' 'django.core.cache.backends.filebased.FileBasedCache' 'django.core.cache.backends.locmem.LocMemCache' 'django.core.cache.backends.memcached.MemcachedCache' 'django.core.cache.backends.memcached.PyLibMCCache'
經過將BACKEND設置爲緩存後端類的徹底限定路徑(例如mypackage.backends.whatever.WhateverCache),可使用第三方的緩存後端。)。
LOCATION:
默認值:''(空字符串)
要使用的緩存的位置,多是文件系統緩存的目錄,內存緩存服務器的主機和端口,或者只是本地內存緩存的標識名稱。 例如:
CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache', 'LOCATION': '/var/tmp/django_cache', } }
OPTIONS:
默認值:None
傳遞到緩存後端的額外參數。可用參數因緩存後端而異。
TIMEOUT:
默認值:300
高速緩存的有效時間。 若是此設置的值爲None,則緩存將永遠不會過時。
VERSION:
默認值:1
Django服務器生成的緩存鍵的默認版本號。
默認值:['django.contrib.auth.backends.ModelBackend']
在嘗試驗證用戶時使用的認證後端的列表。默認使用Django自帶的Auth框架。
默認值:'auth.User'
默認使用的User模型。
默認:'/accounts/profile/'
登陸以後,若是'contrib.auth.login'視圖找不到next參數,請求將被重定向到該URL。
默認:'/accounts/login/'
登陸頁面的URL。
默認值:None
使用LogoutView視圖退出登陸後,請求被重定向的URL。若是設置爲None,則不執行重定向。
默認:3
重置密碼的連接,的有效期,的天數。(逗號分開,是否是更好理解一點?) 用於'django.contrib.auth'的密碼重置功能。
密碼哈希使用的算法。
默認:
[ 'django.contrib.auth.hashers.PBKDF2PasswordHasher', 'django.contrib.auth.hashers.PBKDF2SHA1PasswordHasher', 'django.contrib.auth.hashers.Argon2PasswordHasher', 'django.contrib.auth.hashers.BCryptSHA256PasswordHasher', 'django.contrib.auth.hashers.BCryptPasswordHasher', ]
在Django1.10時,如下hashers從默認值中刪除:
'django.contrib.auth.hashers.SHA1PasswordHasher' 'django.contrib.auth.hashers.MD5PasswordHasher' 'django.contrib.auth.hashers.UnsaltedSHA1PasswordHasher' 'django.contrib.auth.hashers.UnsaltedMD5PasswordHasher' 'django.contrib.auth.hashers.CryptPasswordHasher'
默認值:messages.INFO
設置Django內置的消息框架-message,將記錄的最低消息級別。
默認值:'django.contrib.messages.storage.fallback.FallbackStorage'
控制Django在哪裏存儲消息數據。 有效值爲:
'django.contrib.messages.storage.fallback.FallbackStorage' 'django.contrib.messages.storage.session.SessionStorage' 'django.contrib.messages.storage.cookie.CookieStorage'
默認:1209600(2個星期)
會話Cookie的過時時間,以秒爲單位。
默認值:'sessionid'
要用於會話的Cookie的名稱。 名字隨意,只要與應用程序中的其餘cookie名稱不一樣。
默認值:'django.contrib.sessions.backends.db'
會話使用的後端,也就是會話數據的保存未知。 內置支持的引擎有:
'django.contrib.sessions.backends.db' 'django.contrib.sessions.backends.file' 'django.contrib.sessions.backends.cache' 'django.contrib.sessions.backends.cached_db' 'django.contrib.sessions.backends.signed_cookies'
默認值:False
是否在用戶關閉瀏覽器時過時會話。
默認:未指定
當前站點在'django_site'數據庫表中的ID,一個整數,從1開始計數。
不少人都不知道Django是支持多站點同時運行的。
一般咱們都只有一個站點,因此不關心這個選項。若是你同時運行了多個站點,那麼每一個app就得知道本身是爲那個站點或哪些站點服務的,這就須要SITE_ID參數了。
默認值:None
在DEBUG設置爲False時,也就是線上環境時,Django項目裏的靜態文件(js\css\plugins)會沒法使用。這是,須要運行'python manage.py collectstatic',將靜態文件統一收集到一個目錄下。STATIC_ROOT配置的就是該目錄的絕對路徑。
示例:"/var/www/example.com/static/"
這個目錄,剛開始應該是一個空目錄。
默認值:None
引用位於STATIC_ROOT中的靜態文件時使用的網址。
示例:"/static/"或"http://static.example.com/"
該URL設置爲非空值時,必須以斜槓「/」結束。
默認值:[](空列表)
定義額外的靜態文件搜索地址。
例如:
STATICFILES_DIRS = [ "/home/special.polls.com/polls/static", "/home/polls.com/polls/static", "/opt/webfiles/common", ]
請注意,即便在Windows上(例如"C:/Users/user/mysite/extra_static_content"),這些路徑也要使用Unix樣式的正斜槓。
若是你實在分不清楚'MEDIA_ROOT、MEDIA_URL、STATIC_ROOT、STATIC_URL和STATICFILES_DIRS'的區別,下面是一個參考版的設置:
# Static files (CSS, JavaScript, Images) # https://docs.djangoproject.com/en/1.11/howto/static-files/ STATIC_URL = '/static/' STATICFILES_DIRS = [ os.path.join(BASE_DIR, "static"), ] STATIC_ROOT = os.path.join(BASE_DIR, "all_static_files") MEDIA_ROOT = os.path.join(BASE_DIR, 'media').replace("\\", "/") MEDIA_URL = '/media/'