django-adminmanage.py

django-admin 是 Django 用於管理任務的命令行工具。本文件概述其所有功能。

此外,manage.py 會在每個 Django 專案中自動建立。它的功能與 django-admin 相同,但也會設定 DJANGO_SETTINGS_MODULE 環境變數,使其指向您的專案的 settings.py 檔案。

如果您是透過 pip 安裝 Django,django-admin 腳本應該在您的系統路徑中。如果它不在您的路徑中,請確保您已啟用虛擬環境。

一般來說,當處理單一 Django 專案時,使用 manage.pydjango-admin 更容易。如果您需要在多個 Django 設定檔案之間切換,請搭配 DJANGO_SETTINGS_MODULE--settings 命令行選項使用 django-admin

本文件中所有命令行範例都使用 django-admin 以保持一致,但任何範例都可以使用 manage.pypython -m django

用法

$ django-admin <command> [options]
$ manage.py <command> [options]
$ python -m django <command> [options]
...\> django-admin <command> [options]
...\> manage.py <command> [options]
...\> py -m django <command> [options]

command 應該是本文件中列出的其中一個命令。options(可選)應該是零個或多個適用於給定命令的選項。

取得運行時說明

django-admin help

執行 django-admin help 以顯示使用資訊和每個應用程式提供的命令清單。

執行 django-admin help --commands 以顯示所有可用命令的清單。

執行 django-admin help <command> 以顯示給定命令的描述及其可用選項的清單。

應用程式名稱

許多命令都需要「應用程式名稱」的清單。「應用程式名稱」是包含您的模型的套件的基本名稱。例如,如果您的 INSTALLED_APPS 包含字串 'mysite.blog',則應用程式名稱為 blog

判斷版本

django-admin version

執行 django-admin version 以顯示目前的 Django 版本。

輸出遵循 PEP 440 中描述的結構。

1.4.dev17026
1.4a1
1.4

顯示除錯輸出

使用 --verbosity(在支援的情況下),以指定 django-admin 列印到主控台的通知和除錯資訊量。

可用命令

check

django-admin check [app_label [app_label ...]]

使用 系統檢查框架 來檢查整個 Django 專案中是否存在常見問題。

預設情況下,將會檢查所有應用程式。您可以透過提供應用程式標籤清單作為引數來檢查部分應用程式。

django-admin check auth admin myapp
--tag TAGS, -t TAGS

系統檢查框架會執行許多不同類型的檢查,這些檢查 以標籤分類。您可以使用這些標籤將執行的檢查限制為特定類別中的檢查。例如,若要僅執行模型和相容性檢查,請執行:

django-admin check --tag models --tag compatibility
--database DATABASE

指定執行需要資料庫存取的檢查的資料庫

django-admin check --database default --database other

預設情況下,不會執行這些檢查。

--list-tags

列出所有可用標籤。

--deploy

啟動一些僅在部署設定中相關的其他檢查。

您可以在本機開發環境中使用此選項,但由於本機開發設定模組可能沒有許多生產設定,因此您可能會希望將 check 命令指向不同的設定模組,方法是設定 DJANGO_SETTINGS_MODULE 環境變數,或傳遞 --settings 選項。

django-admin check --deploy --settings=production_settings

或者,您也可以直接在生產或預備部署上執行它,以驗證是否正在使用正確的設定(省略 --settings)。您甚至可以將其納入整合測試套件中。

--fail-level {CRITICAL,ERROR,WARNING,INFO,DEBUG}

指定導致命令以非零狀態結束的訊息層級。預設值為 ERROR

compilemessages

django-admin compilemessages

makemessages 建立的 .po 檔案編譯為 .mo 檔案,以用於內建的 gettext 支援。請參閱 國際化和在地化

--locale LOCALE, -l LOCALE

指定要處理的語系。如果未提供,則會處理所有語系。

--exclude EXCLUDE, -x EXCLUDE

指定要排除在處理之外的語系。如果未提供,則不會排除任何語系。

--use-fuzzy, -f

在編譯檔案中包含 模糊翻譯

用法範例

django-admin compilemessages --locale=pt_BR
django-admin compilemessages --locale=pt_BR --locale=fr -f
django-admin compilemessages -l pt_BR
django-admin compilemessages -l pt_BR -l fr --use-fuzzy
django-admin compilemessages --exclude=pt_BR
django-admin compilemessages --exclude=pt_BR --exclude=fr
django-admin compilemessages -x pt_BR
django-admin compilemessages -x pt_BR -x fr
--ignore PATTERN, -i PATTERN

忽略符合給定 glob 樣式模式的目錄。多次使用可忽略更多目錄。

用法範例

django-admin compilemessages --ignore=cache --ignore=outdated/*/locale

createcachetable

django-admin createcachetable

使用您設定檔中的資訊,建立用於資料庫快取後端的快取表格。請參閱Django 的快取框架以取得更多資訊。

--database DATABASE

指定將建立快取表格的資料庫。預設為 default

--dry-run

印出將執行的 SQL,但不會實際執行,以便您可以自訂它或使用遷移框架。

dbshell

django-admin dbshell

使用您的 ENGINE 設定中指定的資料庫引擎,以及您的 USERPASSWORD 等設定中指定的連線參數,執行資料庫引擎的命令列用戶端。

  • 對於 PostgreSQL,這會執行 psql 命令列用戶端。

  • 對於 MySQL,這會執行 mysql 命令列用戶端。

  • 對於 SQLite,這會執行 sqlite3 命令列用戶端。

  • 對於 Oracle,這會執行 sqlplus 命令列用戶端。

此命令假設這些程式在您的 PATH 中,以便呼叫程式名稱(psqlmysqlsqlite3sqlplus)時能在正確的位置找到程式。沒有辦法手動指定程式的位置。

--database DATABASE

指定要開啟 shell 的資料庫。預設為 default

-- ARGUMENTS

-- 分隔符號之後的任何引數都將傳遞給底層的命令列用戶端。例如,對於 PostgreSQL,您可以使用 psql 命令的 -c 旗標直接執行原始 SQL 查詢

$ django-admin dbshell -- -c 'select current_user'
 current_user
--------------
 postgres
(1 row)
...\> django-admin dbshell -- -c 'select current_user'
 current_user
--------------
 postgres
(1 row)

在 MySQL/MariaDB 上,您可以使用 mysql 命令的 -e 旗標來執行此操作

$ django-admin dbshell -- -e "select user()"
+----------------------+
| user()               |
+----------------------+
| djangonaut@localhost |
+----------------------+
...\> django-admin dbshell -- -e "select user()"
+----------------------+
| user()               |
+----------------------+
| djangonaut@localhost |
+----------------------+

注意

請注意,您在 DATABASES 中資料庫配置的 OPTIONS 部分中設定的所有選項都不會傳遞給命令列用戶端,例如 'isolation_level'

diffsettings

django-admin diffsettings

顯示目前設定檔與 Django 預設設定之間的差異(或由 --default 指定的另一個設定檔)。

預設設定中未出現的設定會以 "###" 作為後綴。例如,預設設定不會定義 ROOT_URLCONF,因此在 diffsettings 的輸出中,ROOT_URLCONF 會以 "###" 作為後綴。

--all

顯示所有設定,即使它們具有 Django 的預設值。這類設定會以 "###" 作為前綴。

--default MODULE

要與目前設定進行比較的設定模組。留空以與 Django 的預設設定進行比較。

--output {hash,unified}

指定輸出格式。可用值為 hashunifiedhash 是預設模式,會顯示如上所述的輸出。unified 顯示類似於 diff -u 的輸出。預設設定會以減號作為前綴,接著是以加號作為前綴的變更設定。

dumpdata

django-admin dumpdata [app_label[.ModelName] [app_label[.ModelName] ...]]

將與指定應用程式相關聯的資料庫中的所有資料輸出到標準輸出。

如果未提供應用程式名稱,則會傾印所有已安裝的應用程式。

dumpdata 的輸出可以用作 loaddata 的輸入。

dumpdata 的結果儲存為檔案時,它可以作為 fixture 用於 測試,或作為 初始資料

請注意,dumpdata 使用模型上的預設管理器來選取要傾印的記錄。如果您使用 自訂管理器 作為預設管理器,並且它會篩選某些可用的記錄,則不會傾印所有物件。

--all, -a

使用 Django 的基礎管理器,傾印可能被自訂管理器篩選或修改的記錄。

--format FORMAT

指定輸出的序列化格式。預設為 JSON。支援的格式列於 序列化格式 中。

--indent INDENT

指定要在輸出中使用的縮排空格數。預設為 None,這會將所有資料顯示在單行上。

--exclude EXCLUDE, -e EXCLUDE

防止傾印特定的應用程式或模型(以 app_label.ModelName 的形式指定)。如果您指定模型名稱,則只會排除該模型,而不是整個應用程式。您也可以混合應用程式名稱和模型名稱。

如果您要排除多個應用程式,請多次傳遞 --exclude

django-admin dumpdata --exclude=auth --exclude=contenttypes
--database DATABASE

指定要從中傾印資料的資料庫。預設為 default

--natural-foreign

使用 natural_key() 模型方法來序列化任何外鍵和多對多關係到定義該方法的類型物件。如果您要傾印 contrib.auth Permission 物件或 contrib.contenttypes ContentType 物件,您可能應該使用此旗標。請參閱 自然鍵 文件以取得關於此和下一個選項的更多詳細資訊。

--natural-primary

省略此物件序列化資料中的主鍵,因為它可以在還原序列化期間計算出來。

--pks PRIMARY_KEYS

僅輸出由逗號分隔的主鍵清單指定的物件。這僅在傾印一個模型時可用。預設情況下,會輸出模型的所有記錄。

--output OUTPUT, -o OUTPUT

指定要將序列化資料寫入的檔案。預設情況下,資料會輸出到標準輸出。

當設定此選項且 --verbosity 大於 0(預設值)時,終端機中會顯示進度條。

固定裝置壓縮

輸出檔案可以使用 bz2gzlzmaxz 格式壓縮,方法是在檔名結尾加上對應的副檔名。例如,要將資料輸出為壓縮的 JSON 檔案

django-admin dumpdata -o mydata.json.gz

flush

django-admin flush

從資料庫移除所有資料,並重新執行任何同步後處理常式。已套用遷移的表格不會被清除。

如果您寧願從空的資料庫開始並重新執行所有遷移,您應該刪除並重新建立資料庫,然後執行 migrate

--noinput, --no-input

抑制所有使用者提示。

--database DATABASE

指定要清除的資料庫。預設為 default

inspectdb

django-admin inspectdb [table [table ...]]

檢視由 NAME 設定指向的資料庫中的資料庫表格,並將 Django 模型模組(models.py 檔案)輸出到標準輸出。

您可以透過傳遞表格或視圖的名稱作為引數來選擇要檢視的表格或視圖。如果未提供任何引數,則僅在使用 --include-views 選項時才會為視圖建立模型。如果在 PostgreSQL 上使用 --include-partitions 選項,則會為分割區表格建立模型。

如果您有一個想要與 Django 一起使用的舊資料庫,請使用此功能。該腳本將檢查資料庫並為其中的每個表格建立一個模型。

正如您可能預期的那樣,建立的模型將為表格中的每個欄位都有一個屬性。請注意,inspectdb 在其欄位名稱輸出中有一些特殊情況

  • 如果 inspectdb 無法將欄位的類型對應到模型欄位類型,它將使用 TextField 並在產生模型中的欄位旁邊插入 Python 註解 'This field type is a guess.'。可識別的欄位可能取決於 INSTALLED_APPS 中列出的應用程式。例如,django.contrib.postgres 為幾個 PostgreSQL 特定的欄位類型增加了識別。

  • 如果資料庫欄位名稱是 Python 保留字(例如 'pass''class''for'),inspectdb 將在屬性名稱後面附加 '_field'。例如,如果表格有一個欄位 'for',產生的模型將有一個欄位 'for_field',並且 db_column 屬性設定為 'for'inspectdb 將在欄位旁邊插入 Python 註解 'Field renamed because it was a Python reserved word.'

此功能旨在作為捷徑,而不是最終的模型產生方式。在您執行它之後,您會想要自己查看產生的模型以進行自訂。特別是,您需要重新排列模型的順序,以便引用其他模型的模型能正確排序。

當在模型欄位上指定 default 時,Django 不會建立資料庫預設值。同樣地,資料庫預設值不會轉換為模型欄位預設值,或以任何方式被 inspectdb 偵測到。

預設情況下,inspectdb 會建立非受管的模型。也就是說,模型 Meta 類別中的 managed = False 告訴 Django 不要管理每個表格的建立、修改和刪除。如果您確實想要允許 Django 管理表格的生命週期,您需要將 managed 選項更改為 True(或刪除它,因為 True 是其預設值)。

資料庫特定注意事項

Oracle
PostgreSQL
  • 為外部表格建立模型。

  • 如果使用 --include-views,則會為實體化視圖建立模型。

  • 如果使用 --include-partitions,則為分割區表格建立模型。

--database DATABASE

指定要檢視的資料庫。預設為 default

--include-partitions

如果提供此選項,也會為分割區建立模型。

僅支援 PostgreSQL 的實作。

--include-views

如果提供此選項,也會為資料庫視圖建立模型。

loaddata

django-admin loaddata fixture [fixture ...]

搜尋並將指定 固定裝置 的內容載入到資料庫中。

--database DATABASE

指定要將資料載入的資料庫。預設為 default

--ignorenonexistent, -i

忽略自最初產生固定裝置以來可能已移除的欄位和模型。

--app APP_LABEL

指定單一應用程式以在其中尋找固定裝置,而不是在所有應用程式中尋找。

--format FORMAT

指定用於從 標準輸入讀取的固定裝置的序列化格式 (例如,jsonxml)。

--exclude EXCLUDE, -e EXCLUDE

排除從指定的應用程式和/或模型載入固定裝置(格式為 app_labelapp_label.ModelName)。多次使用此選項可排除多個應用程式或模型。

stdin 載入固定裝置

您可以使用破折號作為固定裝置名稱,從 sys.stdin 載入輸入。例如:

django-admin loaddata --format=json -

當從 stdin 讀取時,需要使用 --format 選項來指定輸入的序列化格式(例如,jsonxml)。

stdin 載入對於標準輸入和輸出重導很有用。例如:

django-admin dumpdata --format=json --database=test app_label.ModelName | django-admin loaddata --format=json --database=prod -

可以使用 dumpdata 命令來產生 loaddata 的輸入。

另請參閱

關於固定裝置的更多詳細資訊,請參閱 固定裝置 主題。

makemessages

django-admin makemessages

執行目前目錄的整個原始碼樹狀結構,並提取所有標記為翻譯的字串。它會在 conf/locale(在 Django 樹狀結構中)或 locale(適用於專案和應用程式)目錄中建立(或更新)訊息檔案。在對訊息檔案進行變更後,您需要使用 compilemessages 編譯它們,以便與內建的 gettext 支援一起使用。有關詳細資訊,請參閱 i18n 文件

此命令不需要設定組態。但是,當未設定設定時,此命令無法忽略 MEDIA_ROOTSTATIC_ROOT 目錄,或是包含 LOCALE_PATHS

--all, -a

更新所有可用語言的訊息檔案。

--extension EXTENSIONS, -e EXTENSIONS

指定要檢查的檔案副檔名清單(預設值:如果 --domaindjangojs,則為 htmltxtpyjs)。

用法範例

django-admin makemessages --locale=de --extension xhtml

以逗號分隔多個副檔名,或多次使用 -e--extension

django-admin makemessages --locale=de --extension=html,txt --extension xml
--locale LOCALE, -l LOCALE

指定要處理的地區設定。

--exclude EXCLUDE, -x EXCLUDE

指定要排除在處理之外的語系。如果未提供,則不會排除任何語系。

用法範例

django-admin makemessages --locale=pt_BR
django-admin makemessages --locale=pt_BR --locale=fr
django-admin makemessages -l pt_BR
django-admin makemessages -l pt_BR -l fr
django-admin makemessages --exclude=pt_BR
django-admin makemessages --exclude=pt_BR --exclude=fr
django-admin makemessages -x pt_BR
django-admin makemessages -x pt_BR -x fr
--domain DOMAIN, -d DOMAIN

指定訊息檔案的網域。支援的選項為:

  • django 適用於所有 *.py*.html*.txt 檔案(預設值)

  • djangojs 適用於 *.js 檔案

在尋找新的翻譯字串時,追蹤目錄的符號連結。

用法範例

django-admin makemessages --locale=de --symlinks
--ignore PATTERN, -i PATTERN

忽略與給定的 glob 樣式模式相符的檔案或目錄。多次使用可忽略更多項目。

預設會使用下列模式:'CVS''.*''*~''*.pyc'

用法範例

django-admin makemessages --locale=en_US --ignore=apps/* --ignore=secret/*.html
--no-default-ignore

停用 --ignore 的預設值。

--no-wrap

停用在語言檔案中將長訊息行斷成數行。

--no-location

禁止在語言檔案中寫入「#: filename:line」註解行。使用此選項會使技術嫻熟的翻譯人員更難理解每個訊息的上下文。

--add-location [{full,file,never}]

控制語言檔案中的 #: filename:line 註解行。如果此選項是

  • full(如果未指定,則為預設值):行包含檔案名稱和行號。

  • file:行號會省略。

  • never:行會被禁止(與 --no-location 相同)。

需要 gettext 0.19 或更新版本。

--no-obsolete

.po 檔案中移除過時的訊息字串。

--keep-pot

防止刪除在建立 .po 檔案之前產生的暫時 .pot 檔案。這對於除錯可能會阻止建立最終語言檔案的錯誤很有用。

另請參閱

有關如何自訂 makemessages 傳遞給 xgettext 的關鍵字的指示,請參閱 自訂 makemessages 命令

makemigrations

django-admin makemigrations [app_label [app_label ...]]

根據偵測到的模型變更建立新的遷移。遷移、它們與應用程式的關聯性以及更多內容,會在 遷移文件 中深入介紹。

將一個或多個應用程式名稱作為引數提供,會將建立的遷移限制為指定的應用程式和所需的任何相依性(例如,ForeignKey 另一端的表格)。

若要將遷移新增至沒有 migrations 目錄的應用程式,請使用應用程式的 app_label 執行 makemigrations

--noinput, --no-input

禁止所有使用者提示。如果無法自動解決被禁止的提示,則命令將以錯誤碼 3 結束。

--empty

輸出指定應用程式的空白遷移,以供手動編輯。這是針對進階使用者,除非您熟悉遷移格式、遷移作業以及遷移之間的相依性,否則不應使用。

--dry-run

顯示將會建立的遷移,而不會實際將任何遷移檔案寫入磁碟。將此選項與 --verbosity 3 一起使用,也會顯示將會寫入的完整遷移檔案。

--merge

啟用遷移衝突的修復。

--name NAME, -n NAME

允許為產生的遷移命名,而不是使用產生的名稱。名稱必須是有效的 Python 識別符號

--no-header

產生遷移檔案時不包含 Django 版本和時間戳記標頭。

--check

當偵測到模型變更但沒有遷移時,會使 makemigrations 以非零狀態結束。暗示 --dry-run

--scriptable

將日誌輸出和輸入提示重新導向至 stderr,僅將產生的遷移檔案路徑寫入 stdout

--update

將模型變更合併到最新的遷移中,並最佳化產生的操作。

更新後的遷移將會產生一個名稱。為了保留先前的名稱,請使用 --name 進行設定。

migrate

django-admin migrate [app_label] [migration_name]

將資料庫狀態與目前的一組模型和遷移同步。遷移、它們與應用程式的關係等在遷移文件中有詳細介紹。

此命令的行為會根據提供的參數而變化。

  • 沒有參數:所有應用程式都會執行其所有遷移。

  • <app_label>:指定的應用程式會執行其遷移,直到最新的遷移。由於相依性,這可能也會涉及執行其他應用程式的遷移。

  • <app_label> <migrationname>:將資料庫架構帶到已套用指定遷移的狀態,但不會套用同一應用程式中較晚的遷移。如果您之前已遷移超過指定的遷移,這可能會涉及取消套用遷移。您可以使用遷移名稱的前綴,例如 0001,只要它對於給定的應用程式名稱是唯一的即可。使用名稱 zero 回溯所有遷移,也就是還原應用程式的所有已套用遷移。

警告

當取消套用遷移時,所有相依的遷移也將會被取消套用,無論 <app_label> 為何。您可以使用 --plan 來檢查將會取消套用哪些遷移。

--database DATABASE

指定要遷移的資料庫。預設為 default

--fake

將直到目標遷移的遷移(遵循上述規則)標記為已套用,但實際上不會執行 SQL 來變更您的資料庫架構。

這是為了讓進階使用者可以直接操作目前的遷移狀態,如果他們正在手動套用變更;請注意,使用 --fake 會有將遷移狀態表置於需要手動復原才能使遷移正確執行的風險。

--fake-initial

如果所有使用該遷移中所有 CreateModel 操作所建立的模型名稱的資料庫表格已經存在,則允許 Django 跳過應用程式的初始遷移。此選項旨在首次針對在遷移使用之前就已存在的資料庫執行遷移時使用。然而,此選項除了比對表格名稱之外,不會檢查是否符合資料庫架構,因此僅當您確信現有架構與初始遷移中記錄的架構相符時才可安全使用。

--plan

顯示將針對給定的 migrate 命令執行的遷移操作。

--run-syncdb

允許為沒有遷移的應用程式建立表格。雖然不建議這樣做,但在具有數百個模型的大型專案中,遷移框架有時會太慢。

--noinput, --no-input

抑制所有使用者提示。例如,提示詢問是否移除過時的內容類型。

--check

當偵測到未套用的遷移時,會使 migrate 以非零狀態結束。

--prune

django_migrations 表格中刪除不存在的遷移。當已被壓縮遷移取代的遷移檔案遭到移除時,這非常有用。如需更多詳細資訊,請參閱壓縮遷移

optimizemigration

django-admin optimizemigration app_label migration_name

最佳化指定遷移的操作並覆寫現有檔案。如果遷移包含必須手動複製的函式,此命令會建立一個新的遷移檔案,並加上 _optimized 的後綴,此檔案旨在取代指定的遷移。

--check

當遷移可以最佳化時,會使 optimizemigration 以非零狀態結束。

runserver

django-admin runserver [addrport]

在本機上啟動一個輕量級的開發網頁伺服器。預設情況下,伺服器在 IP 位址 127.0.0.1 的 8000 埠上執行。您可以明確傳入 IP 位址和埠號。

如果您以具有一般權限的使用者身分執行此指令碼(建議),您可能沒有權限在較低的埠號上啟動埠。較低的埠號保留給超級使用者(root)。

此伺服器使用 WSGI_APPLICATION 設定所指定的 WSGI 應用程式物件。

警告

請勿在生產環境中使用此伺服器。

此輕量級開發伺服器尚未經過安全性稽核或效能測試,因此不適用於生產環境。讓此伺服器能夠處理生產環境超出 Django 的範疇。

開發伺服器會根據每個請求自動重新載入 Python 程式碼。您不需要為了讓程式碼變更生效而重新啟動伺服器。然而,某些動作,例如新增檔案,不會觸發重新啟動,所以在這些情況下您必須重新啟動伺服器。

如果您使用 Linux 或 MacOS,並且同時安裝了 pywatchmanWatchman 服務,將會使用核心訊號來自動重新載入伺服器 (而不是每秒輪詢檔案修改時間戳記)。這在大型專案上能提供更好的效能、程式碼變更後減少回應時間、更穩健的變更偵測,並降低耗電量。Django 支援 pywatchman 1.2.0 及更高版本。

包含許多檔案的大型目錄可能會導致效能問題

當將 Watchman 與包含大型非 Python 目錄 (例如 node_modules) 的專案一起使用時,建議忽略此目錄以獲得最佳效能。有關如何執行此操作的資訊,請參閱 watchman 文件

Watchman 超時

DJANGO_WATCHMAN_TIMEOUT

Watchman 客戶端的預設超時時間為 5 秒。您可以透過設定 DJANGO_WATCHMAN_TIMEOUT 環境變數來變更它。

當您啟動伺服器,以及每次在伺服器執行時變更 Python 程式碼時,系統檢查框架將會檢查您的整個 Django 專案是否有常見錯誤 (請參閱 check 命令)。如果發現任何錯誤,它們將會列印到標準輸出。您可以使用 --skip-checks 選項來跳過執行系統檢查。

您可以執行任意數量的並行伺服器,只要它們透過多次執行 django-admin runserver 來使用不同的埠即可。

請注意,預設 IP 位址 127.0.0.1 無法從您網路上的其他電腦存取。若要讓您的開發伺服器可讓網路上其他電腦檢視,請使用其自身的 IP 位址 (例如 192.168.2.1)、0 ( 0.0.0.0 的縮寫)、0.0.0.0:: (啟用 IPv6 時)。

您可以提供用括號括住的 IPv6 位址 (例如 [200a::1]:8000)。這將自動啟用 IPv6 支援。

也可以使用僅包含 ASCII 字元的 hostname。

如果啟用了 staticfiles contrib 應用程式 (新專案中的預設值),則 runserver 命令將會被它自己的 runserver 命令覆寫。

伺服器的每個請求和回應的記錄都會傳送到 django.server 記錄器。

--noreload

停用自動重新載入器。這表示如果特定的 Python 模組已經載入到記憶體中,那麼您在伺服器執行時所做的任何 Python 程式碼變更都將不會生效。

--nothreading

停用開發伺服器中的執行緒使用。預設情況下,伺服器是多執行緒的。

--ipv6, -6

使用 IPv6 作為開發伺服器。這會將預設 IP 位址從 127.0.0.1 變更為 ::1

使用不同埠和位址的範例

IP 位址 127.0.0.1 上的埠 8000

django-admin runserver

IP 位址 1.2.3.4 上的埠 8000

django-admin runserver 1.2.3.4:8000

IP 位址 127.0.0.1 上的埠 7000

django-admin runserver 7000

IP 位址 1.2.3.4 上的埠 7000

django-admin runserver 1.2.3.4:7000

IPv6 位址 ::1 上的埠 8000

django-admin runserver -6

IPv6 位址 ::1 上的埠 7000

django-admin runserver -6 7000

IPv6 位址 2001:0db8:1234:5678::9 上的埠 7000

django-admin runserver [2001:0db8:1234:5678::9]:7000

主機 localhost 的 IPv4 位址上的埠 8000

django-admin runserver localhost:8000

主機 localhost 的 IPv6 位址上的埠 8000

django-admin runserver -6 localhost:8000

使用開發伺服器提供靜態檔案

依預設,開發伺服器不會為您的網站提供任何靜態檔案 (例如 CSS 檔案、圖片、MEDIA_URL 下的東西等等)。如果您想要設定 Django 提供靜態媒體,請閱讀 如何管理靜態檔案 (例如圖片、JavaScript、CSS)

在開發中使用 ASGI 提供服務

Django 的 runserver 命令提供 WSGI 伺服器。為了在 ASGI 下執行,您需要使用 ASGI 伺服器。Django Daphne 專案提供 與 runserver 的整合,您可以使用它。

sendtestemail

django-admin sendtestemail [email [email ...]]

將測試電子郵件 (以確認透過 Django 發送電子郵件是否正常運作) 發送到指定的收件者。例如

django-admin sendtestemail foo@example.com bar@example.com

有幾個選項,您可以一起使用它們的任何組合

--managers

使用 mail_managers() 將電子郵件發送到 MANAGERS 中指定的電子郵件地址。

--admins

使用 mail_admins() 將電子郵件發送到 ADMINS 中指定的電子郵件地址。

shell

django-admin shell

啟動 Python 互動式直譯器。

--interface {ipython,bpython,python}, -i {ipython,bpython,python}

指定要使用的 shell。依預設,如果安裝了 IPythonbpython,Django 將會使用它們。如果兩者都安裝了,請指定您想要哪一個,如下所示

IPython

django-admin shell -i ipython

bpython

django-admin shell -i bpython

如果您已安裝「豐富」的 shell,但想要強制使用「純」Python 直譯器,請使用 python 作為介面名稱,如下所示

django-admin shell -i python
--no-startup

停用讀取「純」Python 直譯器的啟動腳本。依預設,會讀取 PYTHONSTARTUP 環境變數或 ~/.pythonrc.py 腳本指向的腳本。

--command COMMAND, -c COMMAND

讓您可以傳遞命令作為字串,以便作為 Django 執行,如下所示

django-admin shell --command="import django; print(django.__version__)"

您也可以將程式碼從標準輸入傳入以執行它。例如

$ django-admin shell <<EOF
> import django
> print(django.__version__)
> EOF

在 Windows 上,由於該平台上 select.select() 的實作限制,會輸出 REPL。

showmigrations

django-admin showmigrations [app_label [app_label ...]]

顯示專案中的所有遷移。您可以從以下兩種格式中選擇一種

--list, -l

列出 Django 所知道的所有應用程式、每個應用程式可用的遷移,以及是否已套用每個遷移 (在遷移名稱旁邊以 [X] 標示)。對於 2 或更高的 --verbosity,也會顯示套用日期時間。

也會列出沒有遷移的應用程式,但它們下方會印出 (no migrations)

這是預設輸出格式。

--plan, -p

顯示 Django 將遵循的遷移計畫以套用遷移。如同 --list,已套用的遷移會以 [X] 標記。當 --verbosity 設定為 2 或以上時,也會顯示遷移的所有相依性。

app_label 參數會限制輸出,但是,提供的應用程式的相依性也可能會被包含在內。

--database DATABASE

指定要檢查的資料庫。預設為 default

sqlflush

django-admin sqlflush

印出 flush 命令將執行的 SQL 語句。

--database DATABASE

指定要印出 SQL 的資料庫。預設為 default

sqlmigrate

django-admin sqlmigrate app_label migration_name

印出指定遷移的 SQL。這需要一個活動的資料庫連線,它將使用該連線來解析約束名稱;這表示您必須針對您希望稍後套用的資料庫副本產生 SQL。

請注意,sqlmigrate 不會為其輸出著色。

--backwards

產生用於取消套用遷移的 SQL。預設情況下,建立的 SQL 是用於以正向方向執行遷移。

--database DATABASE

指定要產生 SQL 的資料庫。預設為 default

sqlsequencereset

django-admin sqlsequencereset app_label [app_label ...]

印出用於重置給定應用程式名稱的序列的 SQL 語句。

序列是一些資料庫引擎用來追蹤自動遞增欄位下一個可用數字的索引。

使用此命令來產生 SQL,以修復序列與其自動遞增欄位資料不同步的情況。

--database DATABASE

指定要印出 SQL 的資料庫。預設為 default

squashmigrations

django-admin squashmigrations app_label [start_migration_name] migration_name

app_label 的遷移壓縮至(包含)migration_name,盡可能減少遷移數量。壓縮後的遷移可以安全地與未壓縮的遷移並存。如需更多資訊,請閱讀 壓縮遷移

當給定 start_migration_name 時,Django 將只包含從此遷移開始(包含此遷移)的遷移。這有助於減輕 RunPythondjango.db.migrations.operations.RunSQL 遷移操作的壓縮限制。

--no-optimize

在產生壓縮遷移時停用最佳化器。預設情況下,Django 會嘗試最佳化遷移中的操作,以減少產生的檔案大小。如果此過程失敗或建立不正確的遷移,請使用此選項,但請同時提交有關該行為的 Django 錯誤報告,因為最佳化應該是安全的。

--noinput, --no-input

抑制所有使用者提示。

--squashed-name SQUASHED_NAME

設定壓縮遷移的名稱。省略時,名稱會根據第一個和最後一個遷移,中間加上 _squashed_

--no-header

產生沒有 Django 版本和時間戳記標頭的壓縮遷移檔案。

startapp

django-admin startapp name [directory]

在目前目錄或給定的目的地中,為給定的應用程式名稱建立 Django 應用程式目錄結構。

預設情況下,新目錄包含一個 models.py 檔案和其他應用程式範本檔案。如果只給定應用程式名稱,則應用程式目錄將在目前工作目錄中建立。

如果提供了可選的目的地,Django 將使用該現有的目錄,而不是建立新目錄。您可以使用「.」來表示目前的工作目錄。

例如

django-admin startapp myapp /Users/jezdez/Code/myapp
--template TEMPLATE

提供自訂應用程式範本檔案的目錄路徑,或包含應用程式範本檔案的未壓縮封存檔 (.tar) 或壓縮封存檔 (.tar.gz.tar.bz2.tar.xz.tar.lzma.tgz.tbz2.txz.tlz.zip)。

例如,這會在建立 myapp 應用程式時,在給定的目錄中尋找應用程式範本

django-admin startapp --template=/Users/jezdez/Code/my_app_template myapp

Django 也會接受指向壓縮封存檔的 URL (httphttpsftp),其中包含應用程式範本檔案,並動態下載和解壓縮它們。

例如,利用 GitHub 將存放庫作為 zip 檔案公開的功能,您可以使用類似以下的 URL

django-admin startapp --template=https://github.com/githubuser/django-app-template/archive/main.zip myapp
--extension EXTENSIONS, -e EXTENSIONS

指定應該使用範本引擎呈現應用程式範本中的哪些檔案副檔名。預設為 py

--name FILES, -n FILES

指定應該使用範本引擎呈現應用程式範本中的哪些檔案(除了符合 --extension 的檔案)。預設為空列表。

--exclude DIRECTORIES, -x DIRECTORIES

指定應該排除應用程式範本中的哪些目錄,除了 .git__pycache__。如果未提供此選項,則名稱為 __pycache__ 或以 . 開頭的目錄將會被排除。

所有相符檔案所使用的 範本 context 為:

  • 傳遞給 startapp 命令的任何選項(在該命令支援的選項中)

  • app_name – 傳遞給命令的應用程式名稱

  • app_directory – 新建立應用程式的完整路徑

  • camel_case_app_name – 以駝峰式大小寫格式表示的應用程式名稱

  • docs_version – 文件版本:'dev''1.x'

  • django_version – Django 的版本,例如 '2.0.3'

警告

當使用 Django 範本引擎渲染應用程式範本檔案(預設為所有 *.py 檔案)時,Django 也會取代所有散落在其中的範本變數。例如,如果其中一個 Python 檔案包含一個說明與範本渲染相關的特定功能的 docstring,則可能會導致不正確的範例。

為了解決這個問題,您可以使用 templatetag 範本標籤來「跳脫」範本語法的各個部分。

此外,為了允許包含 Django 範本語言語法的 Python 範本檔案,同時也防止封裝系統嘗試位元組編譯無效的 *.py 檔案,結尾為 .py-tpl 的範本檔案將會重新命名為 .py

警告

自訂應用程式(或專案)範本的內容在使用前應始終經過審核:此類範本定義的程式碼將成為您專案的一部分,這表示此類程式碼將會像您安裝的任何應用程式或您自己編寫的程式碼一樣受到信任。此外,即使是渲染範本,實際上也是在執行作為管理命令輸入所提供的程式碼。Django 範本語言可能會提供對系統的廣泛存取權,因此請確保您使用的任何自訂範本都值得您信任。

startproject

django-admin startproject name [directory]

在目前目錄或指定的目的地,為給定的專案名稱建立 Django 專案目錄結構。

預設情況下,新目錄 包含 manage.py 和一個專案套件(包含 settings.py 和其他檔案)。

如果只給定專案名稱,專案目錄和專案套件都會被命名為 <projectname>,且專案目錄將會在目前的工作目錄中建立。

如果提供了可選的目的地,Django 會使用該現有目錄作為專案目錄,並在其中建立 manage.py 和專案套件。使用「.」來表示目前的工作目錄。

例如

django-admin startproject myproject /Users/jezdez/Code/myproject_repo
--template TEMPLATE

指定自訂專案範本的目錄、檔案路徑或 URL。請參閱 startapp --template 文件以取得範例和用法。

--extension EXTENSIONS, -e EXTENSIONS

指定專案範本中應使用範本引擎渲染的檔案副檔名。預設值為 py

--name FILES, -n FILES

指定專案範本中除了與 --extension 相符的檔案之外,應使用範本引擎渲染的檔案。預設值為空清單。

--exclude DIRECTORIES, -x DIRECTORIES

指定專案範本中除了 .git__pycache__ 之外,應排除的目錄。如果未提供此選項,則會排除名稱為 __pycache__ 或以 . 開頭的目錄。

所使用的 範本 context 為:

  • 傳遞給 startproject 命令的任何選項(在該命令支援的選項中)

  • project_name – 傳遞給命令的專案名稱

  • project_directory – 新建立專案的完整路徑

  • secret_keySECRET_KEY 設定的隨機金鑰

  • docs_version – 文件版本:'dev''1.x'

  • django_version – Django 的版本,例如 '2.0.3'

另請參閱針對 startapp 所述的 渲染警告受信任的程式碼警告

test

django-admin test [test_label [test_label ...]]

執行所有已安裝應用程式的測試。如需更多資訊,請參閱Django 中的測試

--failfast

在測試失敗後立即停止執行測試並回報失敗。

--testrunner TESTRUNNER

控制用於執行測試的測試執行器類別。此值會覆寫 TEST_RUNNER 設定所提供的值。

--noinput, --no-input

抑制所有使用者提示。典型的提示是關於刪除現有測試資料庫的警告。

測試執行器選項

test 命令代表指定的 --testrunner 接收選項。這些是預設測試執行器 DiscoverRunner 的選項。

--keepdb

在測試執行之間保留測試資料庫。這樣做的好處是可以跳過建立和銷毀動作,這可以大大縮短執行測試的時間,尤其是大型測試套件中的測試。如果測試資料庫不存在,它將在第一次執行時建立,然後為後續的每次執行保留。除非 MIGRATE 測試設定為 False,否則任何未套用的遷移也會在執行測試套件之前套用到測試資料庫。

--shuffle [SEED]

在執行測試之前,隨機排序測試的順序。這可以幫助偵測未正確隔離的測試。此選項產生的測試順序是給定的整數種子的決定性函數。當未傳遞種子時,會隨機選擇一個種子並列印到主控台。要重複特定的測試順序,請傳遞一個種子。此選項產生的測試順序會保留 Django 的 測試順序保證。它們也會讓測試保持依測試案例類別分組。

亂序排列也具有特殊的連貫性屬性,在縮小隔離問題範圍時非常有用。也就是說,對於給定的種子,當執行測試的子集時,新的順序將是原始亂序排列限制在較小的集合。同樣地,當新增測試時,如果保持種子相同,則原始測試的順序在新順序中將保持不變。

--reverse, -r

以相反的執行順序對測試案例進行排序。這可能有助于偵錯未正確隔離的測試的副作用。當使用此選項時,會保留按測試類別分組。此選項可以與 --shuffle 結合使用,以反轉特定種子的順序。

--debug-mode

在執行測試之前,將 DEBUG 設定設為 True。這可能有助于排除測試失敗的問題。

--debug-sql, -d

為失敗的測試啟用 SQL 記錄。如果 --verbosity2,則也會輸出通過測試的查詢。

--parallel [N]
DJANGO_TEST_PROCESSES

在單獨的平行處理序中執行測試。由於現代處理器有多個核心,這可以顯著加快測試的執行速度。

使用不帶值的 --parallel 或帶有值 auto,會根據 multiprocessing.cpu_count() 針對每個核心執行一個測試處理序。您可以通過傳遞所需的處理序數量(例如,--parallel 4)或設定 DJANGO_TEST_PROCESSES 環境變數來覆寫此設定。

Django 將測試案例 — unittest.TestCase 子類別 — 分配到子處理序。如果測試案例類別少於已設定的處理序,Django 將會相應地減少處理序數量。

每個處理序都有自己的資料庫。您必須確保不同的測試案例類別不會存取相同的資源。例如,接觸檔案系統的測試案例類別應建立供自己使用的臨時目錄。

注意

如果您有無法平行執行的測試類別,則可以使用 SerializeMixin 來依序執行它們。請參閱強制依序執行測試類別

此選項需要第三方 tblib 套件才能正確顯示回溯。

$ python -m pip install tblib

此功能在 Windows 上不可用。它也無法與 Oracle 資料庫後端搭配運作。

如果您想在偵錯測試時使用 pdb,則必須停用平行執行 (--parallel=1)。如果沒有停用,您會看到類似 bdb.BdbQuit 的訊息。

警告

當啟用測試平行化並且測試失敗時,Django 可能無法顯示例外回溯。這會使偵錯變得困難。如果遇到此問題,請在不使用平行化的情況下執行受影響的測試,以查看失敗的回溯。

這是一個已知的限制。它源於需要在處理序之間交換物件時將它們序列化。請參閱 什麼可以序列化和反序列化? 以取得詳細資訊。

--tag TAGS

僅執行標記了指定標籤的測試。可以多次指定,並與 test --exclude-tag 結合使用。

無法載入的測試一律視為符合。

--exclude-tag EXCLUDE_TAGS

排除標記了指定標籤的測試。可以多次指定,並與 test --tag 結合使用。

-k TEST_NAME_PATTERNS

以與 unittest 的 -k 選項 相同的方式,執行與測試名稱模式比對的測試方法和類別。可以多次指定。

--pdb

在每個測試錯誤或失敗時產生 pdb 偵錯工具。如果您已安裝,則會改用 ipdb

--buffer, -b

unittest 的 --buffer 選項 相同的方式,捨棄通過測試的輸出 (stdoutstderr)。

--no-faulthandler

Django 在啟動測試時會自動呼叫 faulthandler.enable(),這使其能夠在解譯器當機時列印回溯。傳遞 --no-faulthandler 以停用此行為。

--timing

輸出計時,包括資料庫設定和總執行時間。

--durations N
Django 5.0 的新功能。

顯示 N 個最慢的測試案例(N=0 表示全部)。

Python 3.12 及更新版本

此功能僅適用於 Python 3.12 及更新版本。

testserver

django-admin testserver [fixture [fixture ...]]

使用給定 fixture 中的資料執行 Django 開發伺服器(如 runserver 中所述)。

例如,此命令

django-admin testserver mydata.json

…將會執行下列步驟

  1. 建立測試資料庫,如測試資料庫中所述。

  2. 使用給定 fixture 中的 fixture 資料來填入測試資料庫。(如需 fixture 的詳細資訊,請參閱上面 loaddata 的文件。)

  3. 執行 Django 開發伺服器(如 runserver 中所述),並將其指向這個新建立的測試資料庫,而不是您的生產資料庫。

這在許多方面都很有用

  • 當您編寫檢視如何使用特定 fixture 資料運作的單元測試時,您可以使用 testserver 在網頁瀏覽器中手動與檢視互動。

  • 假設您正在開發 Django 應用程式,並且有一個您想要互動的「原始」資料庫副本。您可以將資料庫匯出到fixture (使用dumpdata 命令,如上所述),然後使用 testserver 執行您的 Web 應用程式並使用該資料。透過這樣的安排,您可以靈活地以任何方式弄亂您的資料,因為您知道無論您進行任何資料更改,都只會對測試資料庫進行。

請注意,此伺服器不會自動偵測您的 Python 原始碼的變更 (如同runserver 的行為)。但是,它會偵測樣板的變更。

--addrport ADDRPORT

指定與預設的 127.0.0.1:8000 不同的連接埠,或 IP 位址和連接埠。此值的格式與runserver 命令的引數完全相同,並且功能也完全相同。

範例

要在連接埠 7000 上執行測試伺服器,並使用 fixture1fixture2

django-admin testserver --addrport 7000 fixture1 fixture2
django-admin testserver fixture1 fixture2 --addrport 7000

(上面的敘述是等效的。我們同時包含它們是為了說明選項是在 fixture 引數之前還是之後都無關緊要。)

要在 1.2.3.4:7000 上執行,並使用 test fixture

django-admin testserver --addrport 1.2.3.4:7000 test
--noinput, --no-input

抑制所有使用者提示。典型的提示是關於刪除現有測試資料庫的警告。

由應用程式提供的命令

某些命令僅在 django.contrib 應用程式實作這些命令並且啟用時才可用。本節將根據應用程式分組說明這些命令。

django.contrib.auth

changepassword

django-admin changepassword [<username>]

僅當安裝 Django 的驗證系統 (django.contrib.auth) 時,此命令才可用。

允許變更使用者的密碼。它會提示您為給定的使用者輸入兩次新密碼。如果輸入的內容相同,則會立即成為新密碼。如果您沒有提供使用者,該命令將嘗試變更使用者名稱與目前使用者相符的密碼。

--database DATABASE

指定要查詢使用者的資料庫。預設為 default

用法範例

django-admin changepassword ringo

createsuperuser

django-admin createsuperuser
DJANGO_SUPERUSER_PASSWORD

僅當安裝 Django 的驗證系統 (django.contrib.auth) 時,此命令才可用。

建立超級使用者帳戶 (擁有所有權限的使用者)。如果您需要建立初始超級使用者帳戶,或者如果您需要以程式方式為您的網站產生超級使用者帳戶,則此方法很有用。

以互動方式執行時,此命令會提示輸入新超級使用者帳戶的密碼。以非互動方式執行時,您可以透過設定 DJANGO_SUPERUSER_PASSWORD 環境變數來提供密碼。否則,將不會設定密碼,並且除非手動為超級使用者帳戶設定密碼,否則該帳戶將無法登入。

在非互動模式下,USERNAME_FIELD 和必要欄位 (列在 REQUIRED_FIELDS 中) 會回復為 DJANGO_SUPERUSER_<uppercase_field_name> 環境變數,除非它們被命令列引數覆寫。例如,要提供 email 欄位,您可以使用 DJANGO_SUPERUSER_EMAIL 環境變數。

--noinput, --no-input

抑制所有使用者提示。如果無法自動解決被抑制的提示,該命令將以錯誤碼 1 結束。

--username USERNAME
--email EMAIL

可以使用命令列上的 --username--email 引數來提供新帳戶的使用者名稱和電子郵件地址。如果未提供其中任何一個,createsuperuser 將在以互動方式執行時提示輸入。

--database DATABASE

指定要將超級使用者物件儲存到的資料庫。

如果您想要自訂資料輸入和驗證,您可以對管理命令進行子類別化,並覆寫 get_input_data()。請參閱原始程式碼以了解現有實作和方法的參數的詳細資訊。例如,如果您在 REQUIRED_FIELDS 中有 ForeignKey,並且想要允許建立執行個體,而不是輸入現有執行個體的主鍵,這可能會很有用。

django.contrib.contenttypes

remove_stale_contenttypes

django-admin remove_stale_contenttypes

僅當安裝 Django 的內容類型應用程式 (django.contrib.contenttypes) 時,此命令才可用。

刪除資料庫中過時的內容類型 (來自已刪除的模型)。任何依賴於已刪除內容類型的物件也會被刪除。在您確認可以繼續刪除之前,會顯示已刪除物件的清單。

--database DATABASE

指定要使用的資料庫。預設為 default

--include-stale-apps

刪除過時的內容類型,包括先前安裝但已從 INSTALLED_APPS 中移除的應用程式中的內容類型。預設為 False

django.contrib.gis

ogrinspect

僅當安裝 GeoDjango (django.contrib.gis) 時,此命令才可用。

請參閱 GeoDjango 文件中的描述

django.contrib.sessions

clearsessions

django-admin clearsessions

可以作為 cron 作業執行,或直接執行以清除過期的工作階段。

django.contrib.staticfiles

collectstatic

僅當安裝了靜態檔案應用程式 (django.contrib.staticfiles) 時,此命令才可用。

請參閱 靜態檔案 文件中其描述

findstatic

僅當安裝了靜態檔案應用程式 (django.contrib.staticfiles) 時,此命令才可用。

請參考 descriptionstaticfiles 文件中的說明。

預設選項

雖然某些指令可能允許它們自己的自訂選項,但每個指令預設都允許下列選項

--pythonpath PYTHONPATH

將給定的檔案系統路徑加入 Python 的 sys.path 模組屬性。如果未提供此項,django-admin 將使用 PYTHONPATH 環境變數。

此選項在 manage.py 中是不必要的,因為它會為您處理設定 Python 路徑。

用法範例

django-admin migrate --pythonpath='/home/djangoprojects/myproject'
--settings SETTINGS

指定要使用的設定模組。設定模組應該採用 Python 套件語法,例如 mysite.settings。如果未提供此項,django-admin 將使用 DJANGO_SETTINGS_MODULE 環境變數。

此選項在 manage.py 中是不必要的,因為它預設會使用目前專案中的 settings.py

用法範例

django-admin migrate --settings=mysite.settings
--traceback

CommandError 引發時,顯示完整的堆疊追蹤。預設情況下,當發生 CommandError 時,django-admin 將會顯示錯誤訊息,而對於任何其他例外情況,則會顯示完整的堆疊追蹤。

此選項會被 runserver 忽略。

用法範例

django-admin migrate --traceback
--verbosity {0,1,2,3}, -v {0,1,2,3}

指定指令應列印到主控台的通知和除錯資訊量。

  • 0 表示沒有輸出。

  • 1 表示正常輸出(預設)。

  • 2 表示詳細輸出。

  • 3 表示非常詳細的輸出。

此選項會被 runserver 忽略。

用法範例

django-admin migrate --verbosity 2
--no-color

停用彩色指令輸出。某些指令會將其輸出格式化為彩色。例如,錯誤將以紅色列印到主控台,而 SQL 陳述式將會以語法醒目提示。

用法範例

django-admin runserver --no-color
--force-color

強制指令輸出著色,如果否則會如 語法著色 中所述被停用。例如,您可能想要將彩色輸出管線傳輸到另一個指令。

--skip-checks

在執行指令之前,略過執行系統檢查。只有當 requires_system_checks 指令屬性不是空的列表或元組時,此選項才可用。

用法範例

django-admin migrate --skip-checks

額外的好處

語法著色

DJANGO_COLORS

如果您的終端機支援 ANSI 彩色輸出,則 django-admin / manage.py 指令將使用漂亮的彩色編碼輸出。如果您將指令的輸出管線傳輸到另一個程式,除非使用 --force-color 選項,否則它將不會使用色彩代碼。

Windows 支援

在 Windows 10 上,Windows Terminal 應用程式、VS Code 和 PowerShell(啟用虛擬終端機處理的地方)允許彩色輸出,並且預設情況下受到支援。

在 Windows 下,傳統的 cmd.exe 原生主控台不支援 ANSI 跳脫序列,因此預設情況下沒有彩色輸出。在這種情況下,需要以下兩個第三方函式庫之一

  • 安裝 colorama,這是一個將 ANSI 色彩代碼轉換為 Windows API 呼叫的 Python 套件。Django 指令將會偵測到它的存在,並且將會利用它的服務來為輸出著色,就像在基於 Unix 的平台上一樣。colorama 可以透過 pip 安裝

    ...\> py -m pip install "colorama >= 0.4.6"
    
  • 安裝 ANSICON,這是一個允許 cmd.exe 處理 ANSI 色彩代碼的第三方工具。Django 指令將會偵測到它的存在,並且將會利用它的服務來為輸出著色,就像在基於 Unix 的平台上一樣。

在 Windows 上其他支援終端機色彩的現代終端機環境,但 Django 並未自動偵測為支援的環境,可能會透過設定適當的環境變數 ANSICON="on" 來「偽造」ANSICON 的安裝。

自訂色彩

用於語法醒目提示的色彩可以自訂。Django 附帶三種色彩調色盤

  • dark,適用於在黑色背景上顯示白色文字的終端機。這是預設的調色盤。

  • light,適用於在白色背景上顯示黑色文字的終端機。

  • nocolor,它會停用語法醒目提示。

您可以透過設定 DJANGO_COLORS 環境變數來選取調色盤,以指定您想要使用的調色盤。例如,若要在 Unix 或 OS/X BASH shell 下指定 light 調色盤,您會在命令提示字元下執行下列操作

export DJANGO_COLORS="light"

您也可以自訂使用的色彩。Django 指定了許多使用色彩的角色

  • error - 主要錯誤。

  • notice - 次要錯誤。

  • success - 成功。

  • warning - 警告。

  • sql_field - SQL 中的模型欄位名稱。

  • sql_coltype - SQL 中的模型欄位類型。

  • sql_keyword - SQL 關鍵字。

  • sql_table - SQL 中的模型名稱。

  • http_info - 1XX HTTP 資訊伺服器回應。

  • http_success - 2XX HTTP 成功伺服器回應。

  • http_not_modified - 304 HTTP 未修改伺服器回應。

  • http_redirect - 3XX HTTP 重新導向伺服器回應,而非 304。

  • http_not_found - 404 HTTP 未找到伺服器回應。

  • http_bad_request - 4XX HTTP 錯誤要求伺服器回應,而非 404。

  • http_server_error - 5XX HTTP 伺服器錯誤回應。

  • migrate_heading - 遷移管理指令中的標題。

  • migrate_label - 遷移名稱。

從下列列表中,每個角色都可以分配一個特定的前景和背景色彩

  • 黑色

  • 紅色

  • 綠色

  • 黃色

  • 藍色

  • 洋紅色

  • 青色

  • 白色

然後可以使用下列顯示選項修改每種色彩

  • 粗體

  • 底線

  • 閃爍

  • 反轉

  • 隱藏

色彩規格遵循下列其中一種模式

  • role=fg

  • role=fg/bg

  • role=fg,option,option

  • role=fg/bg,option,option

其中 role 是有效色彩角色的名稱,fg 是前景色彩,bg 是背景色彩,而每個 option 都是色彩修改選項之一。然後,多個色彩規格以分號分隔。例如

export DJANGO_COLORS="error=yellow/blue,blink;notice=magenta"

將指定錯誤以在藍色背景上使用閃爍的黃色顯示,而通知則使用洋紅色顯示。所有其他色彩角色將保持未著色。

也可以透過擴展基本調色盤來指定色彩。如果您在色彩規格中放入調色盤名稱,則會載入該調色盤所暗示的所有色彩。因此

export DJANGO_COLORS="light;error=yellow/blue,blink;notice=magenta"

將指定使用淺色調色盤中的所有色彩,除了錯誤和通知的色彩,這些色彩將會被如指定的覆寫。

Bash 完成

如果您使用 Bash shell,請考慮安裝 Django bash 完成腳本,該腳本位於 Django 來源發行版的 extras/django_bash_completion 中。它啟用 django-adminmanage.py 指令的 Tab 完成,因此您可以,例如…

  • 輸入 django-admin

  • 按下 [TAB] 鍵以查看所有可用的選項。

  • 輸入 sql,然後按下 [TAB] 鍵,以查看所有名稱以 sql 開頭的可用的選項。

請參閱如何建立自訂 django-admin 命令,以了解如何新增自訂動作。

Black 格式化

startprojectstartappoptimizemigrationmakemigrationssquashmigrations 建立的 Python 檔案,如果您的 PATH 中存在 black 命令,則會使用該命令進行格式化。

如果您已全域安裝 black,但不希望目前專案使用它,您可以明確設定 PATH

PATH=path/to/venv/bin django-admin makemigrations

對於使用 stdout 的命令,您可以根據需要將輸出導向到 black

django-admin inspectdb | black -

從您的程式碼執行管理命令

django.core.management.call_command(name, *args, **options)

要從程式碼呼叫管理命令,請使用 call_command()

name

要呼叫的命令名稱或命令物件。除非測試需要物件,否則建議傳遞名稱。

*args

命令接受的參數清單。參數會傳遞給參數剖析器,因此您可以使用與命令列相同的樣式。例如,call_command('flush', '--verbosity=0')

**options

命令列上接受的具名選項。選項會傳遞給命令,而不會觸發參數剖析器,這表示您需要傳遞正確的類型。例如,call_command('flush', verbosity=0)(零必須是整數而不是字串)。

範例

from django.core import management
from django.core.management.commands import loaddata

management.call_command("flush", verbosity=0, interactive=False)
management.call_command("loaddata", "test_data", verbosity=0)
management.call_command(loaddata.Command(), "test_data", verbosity=0)

請注意,不帶參數的命令選項會以帶有 TrueFalse 的關鍵字傳遞,如您在上面的 interactive 選項中所見。

可以使用以下任一種語法傳遞具名參數

# Similar to the command line
management.call_command("dumpdata", "--natural-foreign")

# Named argument similar to the command line minus the initial dashes and
# with internal dashes replaced by underscores
management.call_command("dumpdata", natural_foreign=True)

# `use_natural_foreign_keys` is the option destination variable
management.call_command("dumpdata", use_natural_foreign_keys=True)

當使用 call_command() 而不是 django-adminmanage.py 時,某些命令選項會有不同的名稱。例如,django-admin createsuperuser --no-input 轉換為 call_command('createsuperuser', interactive=False)。要找出 call_command() 應使用的關鍵字參數名稱,請檢查命令的原始碼中傳遞給 parser.add_argument()dest 參數。

接受多個選項的命令選項會傳遞一個清單

management.call_command("dumpdata", exclude=["contenttypes", "auth"])

call_command() 函數的返回值與命令的 handle() 方法的返回值相同。

輸出重導向

請注意,您可以重新導向標準輸出和錯誤流,因為所有命令都支援 stdoutstderr 選項。例如,您可以寫入

with open("/path/to/command_output", "w") as f:
    management.call_command("dumpdata", stdout=f)
返回頂部