Django基礎教程之配置檔案詳解

SilenceHL 發表於 2021-04-05

宣告:以下內容均為我個人的理解,如果發現錯誤或者疑問可以聯絡我共同探討

本教程為Django基礎教程系列第三篇,前面篇章在以下連結:

Django基礎教程之Django介紹

Django基礎教程之工程搭建

簡介

學習Django可以從Django配置檔案的各項開始,由簡入深的瞭解其作用,從而一步一步學習。本篇文章主要是介紹各項的作用以及如何配置,可以根據需求按需配置。

內容

絕對路徑對映

ABSOLUTE_URL_OVERRIDES

作用:將應用的模型字串對映到採用模型物件並返回其url,基於get_absolute_url方法。無論實際模型類名稱的大小寫如何,此設定中使用的模型名稱均應全部小寫。

管理員

ADMINS

作用:用於接收程式碼錯誤的人員列表,列表中的元素格式為(全名,電子郵箱)

Django專案根路徑

BASE_DIR

作用:以專案根路徑為基礎衍生其他檔案

  BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
  • 從內到外一步一步剖析
    • __file__:返回當前檔案
    • os.path.abspath(__file__):返回當前檔案的絕對路徑
      • os.path.dirname(os.path.abspath(__file__)):返回當前檔案的父目錄
    • os.path.dirname(os.path.dirname(os.path.abspath(__file__))):返回當前檔案父目錄的父目錄

可能這樣還不太清楚,將__file__換成settings.py,可以看出來BASE_DIR是manage.py所在的目錄,即整個專案的根目錄

祕鑰

SECRET_KEY

作用:校驗,主要用於表單、session、csrf

  SECRET_KEY = "adsasdasdsafdasfldasfklasdlfnlasdnfklnasdfklnasldfklkdasf"

除錯模式

DEBUG

作用:當開啟時,執行出現bug會在前端直接顯示,開發,測試過程可以開啟

  DEBUG = True

允許訪問的主機

ALLOWED_HOSTS

作用:在開發的時候可以使用*,當專案上線後需要更換為指定的主機(域名和ip都可以)

  ALLOWED_HOSTS = []

應用、模組註冊

INSTALLED_APPS

作用:將獨立的應用或模組接入Django(注意應用名稱或者模組名稱必須是唯一的

  INSTALLED_APPS = [    
      'django.contrib.admin',    
      'django.contrib.auth',    
      'django.contrib.contenttypes',    
      'django.contrib.sessions',    
      'django.contrib.messages',    
      'django.contrib.staticfiles',       
  ]

通常INSTALLED_APPS預設包含以下Django自帶的應用

  • django.contrib.admin:管理員站點,可以通過admin管理專案(資料、使用者、許可權等),使用admin必須完成以下配置

    • 他依賴django.contrib.auth、django.contrib.contenttypes、django.contrib.sessions、django.contrib.messages四個模組

    • MIDDLEWARE設定必須包括 django.contrib.auth.middleware.AuthenticationMiddleware並且django.contrib.messages.middleware.MessageMiddleware

    • 在專案url配置中必須加入admin

      urls.py
      
      from django.contrib import admin
      from django.urls import path
      
      urlpatterns = [
          path('admin/', admin.site.urls),
      ]
  可以使用django-admin createsuperuser建立管理員使用者
  • django.contrib.auth:認證授權系統。主要負責校驗使用者資訊與使用者許可權,由以下部分組成

    • 使用者:使用者管理

    • 許可權:以二進位制的形式標識指定使用者是否可以執行的特殊任務

    • 組:管理多個使用者的許可權

    • 可配置的密碼雜湊話系統

    • 為登入使用者或限制內容提供表單和檢視工具

    • 可插拔的後端系統

      需要注意的是它不提供密碼強度檢查、限制登入嘗試、第三方身份驗證,物件級許可權

  • django.contrib.contenttypes:內容型別框架,他可以跟蹤Django驅動的專案中安裝的所有模型,為模型提供高階的通用介面

  • django.contrib.sessions:會話框架

  • django.contrib.messages:訊息框架

  • staticfiles:管理靜態檔案框架

    除了這些常見的自帶應用外,在我們使用自己註冊的應用和第三方模組時,記得第一時間來這裡註冊,否則會用不了哦

中介軟體

MIDDLEWARE

作用:中介軟體是Django請求/響應處理的鉤子框架,用於改變Django的輸入或輸出

中介軟體可以放在Python路徑上的任何地方,可以自己編寫中介軟體,中介軟體可以是函式也可以是類。

函式形式的中介軟體

  def simple_middleware(get_response):
      # 首次配置和初始化
      def middleware(request):
          # 每個請求之前或呼叫檢視函式之前執行的程式碼

          response = get_response(request)

          # 每個響應、請求或者呼叫檢視函式之後執行的程式碼

          return response
      return middleware

類形式的中介軟體

      def __init__(self, get_response):
          self.get_response = get_response
          # 首次配置和初始化

      def __call__(self, request):
          # 每個請求之前或呼叫檢視函式之前執行的程式碼

          response = self.get_response(request)

          # 每個響應、請求或者呼叫檢視函式之後執行的程式碼

          return response
  • 上述方法中呼叫get_response方法並不是實際檢視中的,而是處理程式的包裝方法,它負責應用檢視中介軟體,呼叫具有適當的URL引數的檢視,並應用模板響應和第三方中介軟體。

  • 在使用類形式的中介軟體時,__init__方法必須接受get_response引數,還可以初始化中介軟體的一些區域性狀態。

  • 想使用中介軟體就必須在settings.py檔案中的MIDDLEWARE中啟用。啟用的方式是使用字串表示指向中介軟體完整的Python路徑

  • 在Django中MIDDLEWARE可以為空,但是強烈建議至少啟用CommonMiddleware

  • 由於某些中介軟體也會依賴其他中介軟體所以中介軟體在MIDDLEWARE中的順序很重要,Django會按自上而下的順序呼叫中介軟體

路由根路徑

ROOT_URLCONF

作用:Django在處理請求時會最先從此處尋找url

需要注意的是,此處的路徑是基於BASE_DIR的路徑

模板引擎配置

TEMPLATES

作用:在Django中使用模板引擎的設定列表,列表中每個元素都是一個字典,字典裡配置模板引擎

常用的配置引數

  • BACKEND:專案使用的模板引擎,Django內建了兩個
    • django.template.backends.django.DjangoTemplates
    • django.template.backends.jinja2.Jinja2
  • DIRS:模板資料夾的位置
  • APP_DIRS:模板引擎是否在已安裝的應用中訊在模板原始檔
  • OPTIONS:傳給後端模板的額外引數

內建伺服器的路徑

WSGI_APPLICATION

作用:用於調式Django程式的內建伺服器,

資料庫配置

DATABASES

在mysite/mysite/settings.py中,預設的資料庫為SQLite,還支援PostgreSQL、mysql、oracle等其他第三方(這些非官方後端支援的Django版本和ORM功能差異很大。有關這些非官方後端的具體功能的查詢以及任何支援查詢,應該針對每個第三方專案提供的支援渠道)

  DATABASES = {
      'default': {
          'ENGINE': 'django.db.backends.sqlite3',
          'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
      }
  }
  • ENGINE,資料庫引擎,可選的ENGINE還有
  django.db.backends.postgresql、django.db.backends.mysql、django.db.backends.oracle、第三方資料庫
  • NAME,資料庫名稱,如果使用SQLite,他會在根目錄生成一個資料庫檔案

  • 當不使用SQLite時,還會有一下常用引數,其他引數可以查閱文件DATABASES

    • NAME:資料庫名字

    • USER:資料庫的使用者名稱

    • PASSWORD:資料庫的密碼

    • HOST:資料庫的主機

    • PORT:資料庫的埠

    • OPTIONS:連線到資料庫時要使用的其他引數。可用引數取決於資料庫後端。

    • TEST:測試資料庫

      測試資料庫也具備一些設定,也是採用鍵值對的方式對資料庫進行設定

      • CHARSET:建立測試資料庫時使用的字符集編碼
      • COLLATION:建立測試資料庫時使用的排序規則
      • DEPENDENCIES:資料庫的建立順序依耐性
      • MIRROR:測試期間該資料庫應映象的資料庫別名。
      • NAME:執行測試套件時要使用的資料庫的名稱。
      • SERIALIZE:一個布林值,用於控制預設測試執行程式在執行測試之前是否將資料庫序列化為記憶體中的JSON字串。False如果沒有任何帶有測試類,可以將其設定為加快建立時間。
      • TEMPLATE:PostgreSQL的特定設定。從中建立測試資料庫的模板(例如'template0')的名稱。
      • CREATE_DB:預設為True,Oracle特定的設定。如果將其設定為False,則測試表空間將不會在測試開始時自動建立,也不會在測試結束時自動刪除。
      • CREATE_USER:預設為True,Oracle特定的設定。如果將其設定為False,則不會在測試開始時自動建立測試使用者,並在測試結束時自動將其刪除。
      • USER:預設為None,Oracle特定的設定。連線到執行測試時將使用的Oracle資料庫時使用的使用者名稱。如果未提供,則Django將使用。'test_' + USER
      • PASSWORD:預設為None,Oracle特定的設定。連線到執行測試時將使用的Oracle資料庫的密碼。如果未提供,Django將生成一個隨機密碼。
      • TBLSPACE:預設為None,Oracle特定的設定。執行測試時將使用的表空間的名稱。如果未提供,則Django將使用。'test_' + USER
      • TBLSPACE_TMP:預設為None,Oracle特定的設定。執行測試時將使用的臨時表空間的名稱。如果未提供,則Django將使用。'test_' + USER + '_temp'
      • DATAFILE:預設為None,這是Oracle特定的設定。用於TBLSPACE的資料檔案的名稱。如果未提供,則Django將使用。TBLSPACE + '.dbf'
      • DATAFILE_TMP:預設為None,Oracle特定的設定。用於TBLSPACE_TMP的資料檔案的名稱。如果未提供,則Django將使用。TBLSPACE_TMP + '.dbf'
      • DATAFILE_MAXSIZE:預設為500M,Oracle特定的設定。允許DATAFILE增大到的最大大小。
      • DATAFILE_TMP_MAXSIZE:預設為500M,Oracle特定的設定。DATAFILE_TMP允許增加到的最大大小。
      • DATAFILE_SIZE:預設為50M,Oracle特定的設定。DATAFILE的初始大小。
      • DATAFILE_TMP_SIZE:預設為50M,Oracle特定的設定。DATAFILE_TMP的初始大小。
      • DATAFILE_EXTSIZE:預設為25M,Oracle特定的設定。需要更多空間時,DATAFILE_TMP的擴充套件量。

    其他的配置:

    • ATOMIC_REQUESTS:預設為False,當設定為True時將每個檢視包裝在該資料庫的事務中
    • AUTOCOMMIT:預設為True,當設定為False時警用Django的事務管理,可以自己編寫事務管理機制
    • CONN_MAX_AGE:資料庫連線的生存期,以秒為單位。用於0在每個請求結束時關閉資料庫連線-Django的歷史行為-並 None用於無限的持久連線。
    • TIME_ZONE:預設為None,用一個字串表示儲存在此資料庫中的時區

資料庫路由器列表

DATABASE_ROUTERS

作用:執行資料庫查詢時將用來確定要使用哪個資料庫的路由器列表。

閾值檢查

DATA_UPLOAD_MAX_NUMBER_FIELDS

作用:呼叫SuspiciousOperation檢查GET或POST接受的最大值,當設為None時禁用檢查

顯示日期的預設格式

DATE_FORMAT

作用:在任何地方顯示日期欄位的預設格式。

密碼強度列表

AUTH_PASSWORD_VALIDATORS

作用:用於檢查使用者密碼強度的驗證器列表

語言

LANGUAGE_CODE

作用:專案語言,預設為‘en-us’

時區

TIME_ZONE

作用:一個字串表達的時區預設為’UTC’

翻譯系統

USE_I18N

作用:指定是否啟用Django的翻譯系統,預設為True

本地化

USE_L10N

作用:指定預設情況下是否啟用資料本地化格式,預設為True

時區

USE_TZ

作用:指定日期時間預設情況下是否支援時區

靜態資料夾的路徑

STATIC_URL

作用:引用位於靜態檔案時使用的URL

靜態檔案的絕對路徑

STATIC_ROOT

作用:在部署時收集靜態檔案的絕對路徑

本作品採用《CC 協議》,轉載必須註明作者和本文連結