python中setting.py詳解

lm_y發表於2017-09-12

setting.py

          這個檔案包含了所有有關這個Django專案的配置資訊,均大寫:   TEMPLATE_DIRS , DATABASE_NAME , 等. 最重要的設定是 ROOT_URLCONF,它將作為 URLconf 告訴 Django 在這個站點中那些 Python的模組將被用到。

          使用 Django 時, 你必須告訴它你使用的是哪個 settings . 要做到這一點,使用環境變數DJANGO_SETTINGS_MODULE.

預設 settings
       如果不需要, Django settings 檔案可以不必定義任何 settings. 因為每個設定都有預設值. 這些預設值定義在django/conf/global_settings.py.

使用 settings 的法則:

從 global_settings.py 載入預設設定. 
從指定的 settings 檔案載入使用者設定, 需要時覆蓋掉預設設定.注意一個使用者 settings 檔案,不必匯入 global_settings, 這是多餘的.

檢視你改變了哪些設定
有一個簡單的辦法可以檢視你修改了哪些設定.命令 python manage.py diffsettings 顯示當前 settings 檔案與Django 預設設定的不同之處.

在你的程式碼中使用 settings
通過從模組 django.conf.settings 匯入你需要的變數, 你的程式碼可以訪問這個變數. 例子:

from django.conf.settings import DEBUG

if DEBUG:
                  # Do something
注意一定 不要 從 global_settings 或你自己的 settings 模組匯入設定變數到你的程式碼. django.conf.settings 概括了預設設定和站點自定義設定的概念,它提供了一個統一的介面用於使用者程式碼訪問, 也降低了使用者程式碼與使用者設定的耦合程度.

在執行時修改 settings
         不應該在程式執行時修改 settings. 舉例來說, 不要在一個 view 中做這樣的事:

                       from django.conf.settings import DEBUG

                        DEBUG = True   # Don't do this!
      你只應該在你的 settings 檔案中設定 settings, 記住,這是原則.

安全性
由於 settings 檔案包含敏感資訊,象資料庫密碼等.你應該非常小心的設定它的訪問許可權. 舉例來說, 你可以只允許你和 WEB 伺服器使用者閱讀該檔案.在一個共享主機環境時,這一點格外重要.

可用選項

下面是所有可用選項的列表及它們的預設值(按字母順序排列).

ABSOLUTE_URL_OVERRIDES        預設值: {} (空字典)

一個字典對映 "app_label.module_name" 字串到一個函式, 該函式接受一個model物件作為引數並返回它的URL. 這是在一個安裝上覆蓋 get_absolute_url() 方法的一種方式. 例子:

ABSOLUTE_URL_OVERRIDES =

{
    'blogs.blogs': lambda o: "/blogs/%s/" % o.slug,
    'news.stories': lambda o: "/stories/%s/%s/" % (o.pub_year, o.slug),
        }
           ADMIN_FOR            預設值: () (空的tuple)

用於 admin-site settings 模組, 若當前站點是 admin ,它則是一個由 settings 模組組成的 tuple (類似'foo.bar.baz' 這樣的格式).

admin 站點在 models, views,及 template tags 的自動內省的文件中使用該設定.

ADMIN_MEDIA_PREFIX 預設值: '/media/'

The URL prefix for admin media -- CSS, JavaScript and images. Make sure to use a trailing slash.

ADMINS                     預設值: () (空的 tuple)

一個2-元素tuple的 tuple. 列出了有權接收程式碼錯誤提示的人. 當 DEBUG=False 時,一個 view 引發了異常, Django 會將詳細異常資訊用電子郵件的方式傳送給這些人. 該tuple的每個成員應該是這種格式: (Full name, e-mail address). 例子:

(('John','john@example.com'), ('Mary','mary@example.com'))
      ALLOWED_INCLUDE_ROOTS        預設值: () (空的 tuple)

一個字串tuple, 只有以列表中的元素為字首的模板Django才可以以``{% ssi %}`` 形式訪問 . 出於安全考慮, 在不應該訪問時,即使是模板的作者也不能訪問這些檔案.

舉例來說, 若 ALLOWED_INCLUDE_ROOTS 是 ('/home/html', '/var/www'), 那麼 {% ssi /home/html/foo.txt %} 可以正常工作, 不過 {% ssi /etc/passwd %} 卻不能.

APPEND_SLASH 預設值: True

是否給URL新增一個結尾的斜線. 只有安裝了 CommonMiddleware 之後,該選項才起作用. (參閱 middleware 文件). 參閱 PREPEND_WWW.

CACHE_BACKEND預設值: 'simple://'

後端使用的 cache . 參閱 cache docs.

CACHE_MIDDLEWARE_KEY_PREFIX預設值: '' (空的字串)

cache 中介軟體使用的cache key 字首. 參閱 cache docs.

DATABASE_ENGINE預設值: 'postgresql'

後端使用的資料庫引擎: 'postgresql', 'mysql', 'sqlite3' 或 'ado_mssql' 中的任意一個.

DATABASE_HOST預設值: '' (空的字串)

資料庫所在的主機. 空的字串意味著 localhost. SQLite 不需要該項. 如果你使用 MySQL 並且該選項的值以一個斜線 ('/') 開始, MySQL 則通過一個 Unix socket 連線到指定的 socket. 比如:

DATABASE_HOST = '/var/run/mysql'
如果你使用 MySQL 並且該選項的值 不是 以斜線開始, 那麼該選項的值就是主機的名字.

DATABASE_NAME預設值: '' (空的字串)

要使用的資料庫名字. 對 SQLite, 它必須是一個資料庫檔案的全路徑名字.

DATABASE_PASSWORD預設值: '' (空的字串)

連線資料庫需要的密碼. SQLite 不需要該項.

DATABASE_PORT預設值: '' (空的字串)

連線資料庫所需的資料庫埠. 空的字串表示預設埠. SQLite 不需要該項.

DATABASE_USER預設值: '' (空的字串)

連線資料庫時所需要的使用者名稱. SQLite 不需要該項.

DATE_FORMAT預設值: 'N j, Y' (舉例來說 Feb. 4, 2003)

在 Django admin change-list 頁對日期欄位使用的預設日期格式, 系統中的其它部分也可能使用該格式. 參閱allowed date format strings.

參閱 DATETIME_FORMAT 和 TIME_FORMAT.

DATETIME_FORMAT
預設值: 'N j, Y, P' (舉例來說 Feb. 4, 2003, 4 p.m.)

在 Django admin change-list 頁對日期時間欄位使用的預設日期時間格式, 系統中的其它部分也可能使用該格式. 參閱 allowed date format strings.

參閱 DATE_FORMAT 和 TIME_FORMAT.

DEBUG預設值: False

一個開關除錯模式的邏輯值

DEFAULT_CHARSET預設值: 'utf-8'

如果一個 MIME 型別沒有人為指定, 對所有 HttpResponse 物件將應用該預設字符集. 使用DEFAULT_CONTENT_TYPE 來構建 Content-Type 頭.

DEFAULT_CONTENT_TYPE預設值: 'text/html'

如果一個 MIME 型別沒有人為指定, 對所有 HttpResponse 物件將應用該預設 content type. 使用DEFAULT_CHARSET 來構建 Content-Type 頭.

DEFAULT_FROM_EMAIL預設值: 'webmaster@localhost'

用於傳送(站點自動生成的)管理郵件的預設 e-mail 郵箱.

DISALLOWED_USER_AGENTS預設值: () (空的 tuple)

一個編譯的正規表示式物件列表,用於表示一些使用者代理字串.這些使用者代理將被禁止訪問系統中的任何頁面. 使用這個對付頁面機器人或網路爬蟲.只有安裝 CommonMiddleware 後這個選項才有用(參閱 middleware 文件).

EMAIL_HOST預設值: 'localhost'

用來傳送 e-mail 的主機. 參閱 EMAIL_PORT.

EMAIL_HOST_PASSWORD預設值: '' (空的字串)

EMAIL_HOST 中定義的 SMTP 伺服器使用的密碼. 如果為空, Django 不會嘗試進行認證.

參閱 EMAIL_HOST_USER.

EMAIL_HOST_USER預設值: '' (空的字串)

EMAIL_HOST 中定義的 SMTP 伺服器使用的使用者名稱. 如果為空, Django 不會嘗試進行認證.

參閱 EMAIL_HOST_PASSWORD.

EMAIL_PORT預設值: 25

EMAIL_HOST 中指定的SMTP 伺服器所使用的埠號.

EMAIL_SUBJECT_PREFIX預設值: '[Django] '

django.core.mail.mail_admins 或 django.core.mail.mail_managers 傳送的郵件的主題字首.

ENABLE_PSYCO預設值: False

如果允許 Psyco, 將使用Pscyo優化 Python 程式碼. 需要 Psyco 模組.

IGNORABLE_404_ENDS預設值: ('mail.pl', 'mailform.pl', 'mail.cgi', 'mailform.cgi', 'favicon.ico', '.php')

參閱 IGNORABLE_404_STARTS.

IGNORABLE_404_STARTS預設值: ('/cgi-bin/', '/_vti_bin', '/_vti_inf')

一個字串 tuple . 以該tuple中元素為開頭的 URL 應該被 404 e-mailer 忽略. 參閱SEND_BROKEN_LINK_EMAILS 和 IGNORABLE_404_ENDS.

INSTALLED_APPS預設值: () (空的 tuple)

一個字串tuple ,內容是本 Django 安裝中的所有應用. 每個字串應該是一個包含Django應用程式的Python包的路徑全稱, django-admin.py startapp 會自動往其中新增內容.

INTERNAL_IPS預設值: () (空的 tuple)

一個 ip 地址的 tuple(字串形式), 它:

當 DEBUG 為 True 時,參閱除錯務註解
接收 X 頭(若 XViewMiddleware 已安裝), (參閱 middleware 文件) 
JING_PATH
預設值: '/usr/bin/jing'

"Jing" 執行檔案路徑全名. Jing 是一個 RELAX NG 校驗器, Django 使用它對你的 model 的 XMLField 進行驗證. 參閱 http://www.thaiopensource.com/relaxng/jing.html .

LANGUAGE_CODE預設值: 'en-us'

表示預設語言的一個字串. 必須是標準語言格式. 舉例來說, U.S. English 就是 "en-us". 參閱internationalization docs.

LANGUAGES預設值: 一個 tuple (內容為所有可用語言). 目前它的值是:

LANGUAGES = (
    ('bn', _('Bengali')),
    ('cs', _('Czech')),
    ('cy', _('Welsh')),
    ('da', _('Danish')),
    ('de', _('German')),
    ('en', _('English')),
    ('es', _('Spanish')),
    ('fr', _('French')),
    ('gl', _('Galician')),
    ('is', _('Icelandic')),
    ('it', _('Italian')),
    ('no', _('Norwegian')),
    ('pt-br', _('Brazilian')),
    ('ro', _('Romanian')),
    ('ru', _('Russian')),
    ('sk', _('Slovak')),
    ('sr', _('Serbian')),
    ('sv', _('Swedish')),
    ('zh-cn', _('Simplified Chinese')),
)
一個2-元素tuple<格式為 (語言程式碼, 語言名稱)>的 tuple. 該設定用於選擇可用語言.參閱internationalization docs 瞭解細節.

通常這個預設值就足夠了.除非你打算減少提供的語言數目,否則沒必要修改這個設定.

MANAGERS預設值: ADMINS (不論 ADMINS 是否已經設定)

一個和 ADMINS 同樣格式的 tuple , 當 SEND_BROKEN_LINK_EMAILS=True 時, 這些人有權接收死連結通知資訊.

MEDIA_ROOT預設值: '' (空的字串)

一個絕對路徑, 用於儲存媒體檔案. 例子: "/home/media/media.lawrence.com/" 參閱 MEDIA_URL.

MEDIA_URL預設值: '' (空的字串)

處理媒體服務的URL(媒體檔案來自 MEDIA_ROOT). 如: "http://media.lawrence.com"

MIDDLEWARE_CLASSES
        預設值:

("django.contrib.sessions.middleware.SessionMiddleware",
 "django.contrib.auth.middleware.AuthenticationMiddleware",
 "django.middleware.common.CommonMiddleware",
 "django.middleware.doc.XViewMiddleware")
一個django 用到的中介軟體 class 名稱的 tuple. 參閱 middleware 文件.

PREPEND_WWW預設值: False

是否為沒有 "www." 字首的域名新增 "www." 字首. 當且僅當安裝有 CommonMiddleware 後該選項才有效. (參閱middleware 文件).參閱 APPEND_SLASH.

ROOT_URLCONF預設值: Not defined

一個字串,表示你的根 URLconf 的模組名. 舉例來說:"mydjangoapps.urls". 參閱 Django如何處理一個請求.

SECRET_KEY預設值: '' (空的字串)

一個密碼. 用於為密碼雜湊演算法提供一個種子.將其設定為一個隨機字串 -- 越長越好. django-admin.py startproject 會自動給你建立一個.

SEND_BROKEN_LINK_EMAILS預設值: False

當有人從一個有效Django-powered頁面訪問另一個Django-powered頁面時發現404錯誤(也就是發現一個死連結)時, 是否傳送一封郵件給 MANAGERS. 當且僅當 安裝有 CommonMiddleware 時該選項才有效(參閱`middleware 文件`_). 參閱 IGNORABLE_404_STARTS `` 和 IGNORABLE_404_ENDS``.

SERVER_EMAIL預設值: 'root@localhost'

用來傳送錯誤資訊的郵件地址, 比如傳送給 ADMINS 和 MANAGERS 的郵件.

SESSION_COOKIE_AGE預設值: 1209600 (2周, 以秒計)

session cookies 的生命週期, 以秒計. 參閱 session docs.

SESSION_COOKIE_DOMAIN預設值: None

session cookies 有效的域. 將其值設定為類似 ".lawrence.com" 這樣 cookie 就可以跨域生效, 或者使用None 作為一個標準的域 cookie. 參閱 session docs.

SESSION_COOKIE_NAME預設值: 'sessionid'

session 使用的cookie 名字. 參閱 session docs.

SESSION_SAVE_EVERY_REQUEST預設值: False

是否每次請求都儲存session. 參閱 session docs.

SITE_ID預設值: Not defined

是一個整數, 表示 django_site 表中的當前站點. 當一個資料包含多個站點資料時,你的程式可以據此 ID 訪問特定站點的資料.

TEMPLATE_CONTEXT_PROCESSORS預設值:

("django.core.context_processors.auth",
"django.core.context_processors.debug",
"django.core.context_processors.i18n")
A tuple of callables that are used to populate the context in RequestContext. These callables take a request object as their argument and return a dictionary of items to be merged into the context.

TEMPLATE_DEBUG預設值: False

一個布林值,用來開關模板除錯模式.若設定為 True, 如果有任何 TemplateSyntaxError,一個詳細的錯誤報告資訊頁將被顯示給你.這個報告包括有關的模板片斷,相應的行會自動高亮.

注意 Django 僅在 DEBUG 為 True 時顯示這個資訊頁面.

參閱 DEBUG.

TEMPLATE_DIRS預設值: () (空的 tuple)

模板原始檔目錄列表,按搜尋順序. 注意要使用 Unix-風格的前置斜線(即'/'), 即便是在 Windows 上.

參閱 template documentation.

TEMPLATE_LOADERS預設值: ('django.template.loaders.filesystem.load_template_source',)

一個元素為可呼叫物件(字串形式的)的 tuple. 這些物件知道如何匯入 templates 從各種源中. 參閱 template documentation.

TEMPLATE_STRING_IF_INVALID預設值: '' (空的字串)

輸出文字, 作為一個字串. 模板系統將會在出錯 (比如說拼錯了) 時使用該變數. 參閱 How invalid variables are handled.

TIME_FORMAT預設值: 'P' (舉例來說 4 p.m.)

Django admin change-list 使用的預設時間格式. 有可能系統的其它部分也使用該格式. 參閱 allowed date format strings.

參閱 DATE_FORMAT 和 DATETIME_FORMAT.

TIME_ZONE預設值: 'America/Chicago' (我們可以用 'Asia/Shanghai PRC' )

一個表示當前時區的字串. 參閱 選擇項列表.

Django 據此設定轉換所有的日期/時間 -- 並不考慮伺服器的時區設定. 舉例來說, 一臺伺服器可以服務多個Django-powered 站點,每個站點使用一個獨立的時區設定.

USE_ETAGS預設值: False

一個布林值.指定是否輸出 "Etag" 頭. 這個選項可以節省網路頻寬,但損失效能. 只有安裝 CommonMiddleware 後這個選項才有用(參閱 middleware 文件)

建立你自己的 settings
         你可以為自己的Django 應用程式建立自定義 settings. 只需要你遵守以下慣例:

      設定名稱全部大寫. 如果某項設定是一個序列,優先使用 tuple.這完全是基於效能考慮. 不要為已經存的一個設定重新發明一個名字. 

相關文章