主頁 > 後端開發 > Django筆記三十九之settings配置介紹

Django筆記三十九之settings配置介紹

2023-05-10 07:37:28 後端開發

本文首發于公眾號:Hunter后端

原文鏈接:Django筆記三十九之settings配置介紹

這一篇筆記介紹 Django 里 settings.py 里一些常用的配置項,這些配置有一些是在之前的筆記中有過介紹的,比如 logging 的日志配置,session 的會話配置等,這里就只做一下簡單的回顧,有一些是之前沒有介紹過的就著重介紹一下,

以下是本篇筆記目錄:

  1. 郵箱配置
  2. 允許訪問地址配置
  3. 資料庫配置
  4. 除錯模式配置
  5. 注冊應用程式配置
  6. 時區時間配置
  7. 會話配置
  8. 其他配置

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會顯示一個詳細的回溯,比如下面的資訊:

3fffc1e1f0e8523a282bda14f43759d4.png

而如果我們設定 DEBUG=False,顯示的資訊就會如下:

725c5a4da8d319aaffc39fa9888a98a6.png

回傳給前臺的就是一個簡單的錯誤頁面,而不是像上面一樣暴露出詳細的檔案路徑和錯誤資訊

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 的名稱,默認為 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 檔案的上層檔案夾,
如果想獲取更多后端相關文章,可掃碼關注閱讀:
image

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/551991.html

標籤:其他

上一篇:【redis】哨兵監控原理

下一篇:返回列表

標籤雲
其他(158699) Python(38124) JavaScript(25407) Java(18024) C(15222) 區塊鏈(8262) C#(7972) AI(7469) 爪哇(7425) MySQL(7172) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5871) 数组(5741) R(5409) Linux(5336) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4570) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2432) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1965) Web開發(1951) HtmlCss(1932) python-3.x(1918) 弹簧靴(1913) C++(1912) xml(1889) PostgreSQL(1875) .NETCore(1857) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 【C++】Microsoft C++、C 和匯編程式檔案

    ......

    uj5u.com 2020-09-10 00:57:23 more
  • 例外宣告

    相比于斷言適用于排除邏輯上不可能存在的狀態,例外通常是用于邏輯上可能發生的錯誤。 例外宣告 Item 1:當函式不可能拋出例外或不能接受拋出例外時,使用noexcept 理由 如果不打算拋出例外的話,程式就會認為無法處理這種錯誤,并且應當盡早終止,如此可以有效地阻止例外的傳播與擴散。 示例 //不可 ......

    uj5u.com 2020-09-10 00:57:27 more
  • Codeforces 1400E Clear the Multiset(貪心 + 分治)

    鏈接:https://codeforces.com/problemset/problem/1400/E 來源:Codeforces 思路:給你一個陣列,現在你可以進行兩種操作,操作1:將一段沒有 0 的區間進行減一的操作,操作2:將 i 位置上的元素歸零。最終問:將這個陣列的全部元素歸零后操作的最少 ......

    uj5u.com 2020-09-10 00:57:30 more
  • UVA11610 【Reverse Prime】

    本人看到此題沒有翻譯,就附帶了一個自己的翻譯版本 思考 這一題,它的第一個要求是找出所有 $7$ 位反向質數及其質因數的個數。 我們應該需要質數篩篩選1~$10^{7}$的所有數,這里就不慢慢介紹了。但是,重讀題,我們突然發現反向質數都是 $7$ 位,而將它反過來后的數字卻是 $6$ 位數,這就說明 ......

    uj5u.com 2020-09-10 00:57:36 more
  • 統計區間素數數量

    1 #pragma GCC optimize(2) 2 #include <bits/stdc++.h> 3 using namespace std; 4 bool isprime[1000000010]; 5 vector<int> prime; 6 inline int getlist(int ......

    uj5u.com 2020-09-10 00:57:47 more
  • C/C++編程筆記:C++中的 const 變數詳解,教你正確認識const用法

    1、C中的const 1、區域const變數存放在堆疊區中,會分配記憶體(也就是說可以通過地址間接修改變數的值)。測驗代碼如下: 運行結果: 2、全域const變數存放在只讀資料段(不能通過地址修改,會發生寫入錯誤), 默認為外部聯編,可以給其他源檔案使用(需要用extern關鍵字修飾) 運行結果: ......

    uj5u.com 2020-09-10 00:58:04 more
  • 【C++犯錯記錄】VS2019 MFC添加資源不懂如何修改資源宏ID

    1. 首先在資源視圖中,添加資源 2. 點擊新添加的資源,復制自動生成的ID 3. 在解決方案資源管理器中找到Resource.h檔案,編輯,使用整個專案搜索和替換的方式快速替換 宏宣告 4. Ctrl+Shift+F 全域搜索,點擊查找全部,然后逐個替換 5. 為什么使用搜索替換而不使用屬性視窗直 ......

    uj5u.com 2020-09-10 00:59:11 more
  • 【C++犯錯記錄】VS2019 MFC不懂的批量添加資源

    1. 打開資源頭檔案Resource.h,在其中預先定義好宏 ID(不清楚其實ID值應該設定多少,可以先新建一個相同的資源項,再在這個資源的ID值的基礎上遞增即可) 2. 在資源視圖中選中專案資源,按F7編輯資源檔案,按 ID 型別 相對路徑的形式添加 資源。(別忘了先把檔案拷貝到專案中的res檔案 ......

    uj5u.com 2020-09-10 01:00:19 more
  • C/C++編程筆記:關于C++的參考型別,專供新手入門使用

    今天要講的是C++中我最喜歡的一個用法——參考,也叫別名。 參考就是給一個變數名取一個變數名,方便我們間接地使用這個變數。我們可以給一個變數創建N個參考,這N + 1個變數共享了同一塊記憶體區域。(參考型別的變數會占用記憶體空間,占用的記憶體空間的大小和指標型別的大小是相同的。雖然參考是一個物件的別名,但 ......

    uj5u.com 2020-09-10 01:00:22 more
  • 【C/C++編程筆記】從頭開始學習C ++:初學者完整指南

    眾所周知,C ++的學習曲線陡峭,但是花時間學習這種語言將為您的職業帶來奇跡,并使您與其他開發人員區分開。您會更輕松地學習新語言,形成真正的解決問題的技能,并在編程的基礎上打下堅實的基礎。 C ++將幫助您養成良好的編程習慣(即清晰一致的編碼風格,在撰寫代碼時注釋代碼,并限制類內部的可見性),并且由 ......

    uj5u.com 2020-09-10 01:00:41 more
最新发布
  • Django筆記三十九之settings配置介紹

    本文首發于公眾號:Hunter后端 原文鏈接:Django筆記三十九之settings配置介紹 這一篇筆記介紹 Django 里 settings.py 里一些常用的配置項,這些配置有一些是在之前的筆記中有過介紹的,比如 logging 的日志配置,session 的會話配置等,這里就只做一下簡單的 ......

    uj5u.com 2023-05-10 07:37:28 more
  • 【redis】哨兵監控原理

    redis-主從模式弊端: 一、master節點例外shutdown后,從機原地待命,從機資料可以查詢(不可以寫入),等待主機重啟歸來 二、復制延時,信號衰減 redis-哨兵監控: 是什么? 哨兵即為吹哨人,可以巡查監控后臺master主機是否故障,如果故障可以根據投票數自動將一個從庫轉換為新的m ......

    uj5u.com 2023-05-10 07:32:04 more
  • 實驗五 Java多執行緒程式設計

    實驗五 Java多執行緒程式設計

    實驗目的
    1. 掌握Runnable介面實作多執行緒的方法
    2. 掌握Thread類實作多執行緒的用法
    3. 掌握Java語言中多執行緒編程的基本方法 ......

    uj5u.com 2023-05-10 07:26:53 more
  • 分享一個提高運維效率的 Python 腳本

    哈嘍大家好我是咸魚,今天給大家分享一個能夠提升運維效率的 python 腳本 咸魚平常在作業當中通常會接觸到下面類似的場景: 容災切換的時候批量對機器上的組態檔內容進行修改替換 對機器批量替換某個檔案中的欄位 對于 Linux 機器,咸魚可以寫個 shell 腳本或者直接批量使用 sed 命令就能 ......

    uj5u.com 2023-05-10 07:26:45 more
  • Spring AOP官方檔案學習筆記(四)之Spring AOP的其他知識點

    1.選擇哪種AOP (1) 使用Spring AOP比使用完整版的AspectJ更方便簡單,因為不需要在開發和構建程序中引入AspectJ編譯器以及織入器,如果我們只希望通知能夠在Spring Bean上執行,那么選用Spring AOP就可以了,如果我們希望通知能夠在不由Spring所管理的物件上 ......

    uj5u.com 2023-05-10 07:26:24 more
  • 關于并發編程與執行緒安全的思考與實踐

    并發編程的意義是充分的利用處理器的每一個核,以達到最高的處理性能,可以讓程式運行的更快。而處理器也為了提高計算速率,作出了一系列優化 ......

    uj5u.com 2023-05-10 07:21:07 more
  • 由淺入深學MySQL之事務全攻略

    前言 從今天開始本系列就帶各位小伙伴學習資料庫技術。資料庫技術是Java開發中必不可少的一部分知識內容。也是非常重要的技術。本系列教程由淺入深, 全面講解資料庫體系。 非常適合零基礎的小伙伴來學習。 全文大約 【1707】 字,不說廢話,只講可以讓你學到技術、明白原理的純干貨!本文帶有豐富案例及配圖 ......

    uj5u.com 2023-05-10 07:19:57 more
  • Python3.10動態修改Windows系統(win10/win11)本地IP地址(靜態IP)

    一般情況下,局域網里的終端比如本地服務器設定靜態IP的好處是可以有效減少網路連接時間,原因是程序中省略了每次聯網后從DHCP服務器獲取IP地址的流程,缺點是容易引發IP地址的沖突,當然,還有操作層面的繁瑣,如果想要切換靜態IP地址,就得去網路連接設定中手動操作,本次我們使用Python3.10動態地 ......

    uj5u.com 2023-05-09 08:37:46 more
  • Python3.10動態修改Windows系統(win10/win11)本地IP地址(靜態IP)

    一般情況下,局域網里的終端比如本地服務器設定靜態IP的好處是可以有效減少網路連接時間,原因是程序中省略了每次聯網后從DHCP服務器獲取IP地址的流程,缺點是容易引發IP地址的沖突,當然,還有操作層面的繁瑣,如果想要切換靜態IP地址,就得去網路連接設定中手動操作,本次我們使用Python3.10動態地 ......

    uj5u.com 2023-05-09 08:31:53 more
  • Spring 注解

    @SpringBootApplication 申明讓spring boot自動給程式進行必要的配置,這個配置等同于: @Configuration ,@EnableAutoConfiguration 和 @ComponentScan 三個配置。 @RequestMapping 提供路由資訊,負責UR ......

    uj5u.com 2023-05-09 07:48:30 more