作為一個強大而靈活的框架,Django 為開發(fā)人員提供了大量命令來簡化網(wǎng)絡(luò)應(yīng)用程序的開發(fā)和管理。雖然運行服務(wù)器、遷移和創(chuàng)建超級用戶等命令經(jīng)常被使用,但 Django 還提供了大量鮮為人知的命令,這些命令可以大大提高工作流程和效率。
我們將介紹五條 Django 命令,它們可以幫您更輕松、更精確地管理應(yīng)用程序。
差異設(shè)置
diffsettings 顯示當前 settings.py 與 Django 默認設(shè)置之間的差異。這對于調(diào)試配置問題非常有用,因為它能準確顯示哪些已被覆蓋,哪些仍為默認值。此外,這還有助于編寫文檔,因為您可以快速生成應(yīng)用程序所有自定義設(shè)置的列表。
要使用 diffsettings 命令,請運行以下命令:
python manage.py diffsettings
此命令的輸出結(jié)果如下,其中列出了所有自定義設(shè)置:
ALLOWED_HOSTS = ['example.com']
DEBUG = False
LANGUAGE_CODE = 'fr'
在命令末尾添加統(tǒng)一輸出(--output unified),輸出結(jié)果會更像典型的 git diff。
檢查數(shù)據(jù)庫
inspectdb 會查看數(shù)據(jù)庫表,并打印出 Django 模型。它的最大用例是,如果你有一個想與 Django 一起使用的傳統(tǒng)數(shù)據(jù)庫。腳本會查看數(shù)據(jù)庫,并為找到的每個表創(chuàng)建 Django 模型。
要使用 inspectdb 命令,請運行以下命令:
python manage.py inspectdb
該命令的輸出結(jié)果如下:
from django.db import models
class MyTable(models.Model):
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=255)
created_at = models.DateTimeField()
class Meta:
managed = False
db_table = 'my_table'
通過表名,只為該表建立模型。
顯示遷移
showmigrations 顯示項目的所有遷移以及是否已應(yīng)用。當你不太確定事情的進展,又不想盲目應(yīng)用遷移時,這條命令非常有用。該命令可用于跟蹤遷移、調(diào)試、記錄和部署驗證。
要使用 showmigrations 命令,需要運行以下命令:
python manage.py showmigrations
該命令的輸出結(jié)果如下:
app_name
[ ] 0001_initial
[X] 0002_auto_20210516_1234
[ ] 0003_auto_20210610_1432
[] 表示未應(yīng)用遷移,而 [x] 表示已應(yīng)用遷移。
在命令中添加 --plan 標志,以模擬 Django 如何應(yīng)用遷移。如果你有一些棘手的遷移邏輯,這可能會幫到你。
dbshell
dbshell 為您在 ENGINE 設(shè)置中指定的數(shù)據(jù)庫引擎提供交互式 shell。默認情況下是 SQLite,但也可以選擇其他引擎。例如,PostgreSQL 使用 psql,MySQL 使用 mysql。
要使用 dbshell 命令,請運行以下命令:
python manage.py dbshell
該命令的輸出結(jié)果如下,具體取決于您使用的引擎:
SQLite version 3.43.2 2023-10-10 13:08:14
Enter ".help" for usage hints.
sqlite>
如果有多個數(shù)據(jù)庫,可以使用 --database 標志選擇要連接的數(shù)據(jù)庫。
dumpdata
dumpdata 可以將數(shù)據(jù)庫中的所有數(shù)據(jù)輸出到一個文件中。當你可能要進行一些危險的更改,或者要將數(shù)據(jù)遷移到另一個項目時,這對于將數(shù)據(jù)庫備份到文件中是非常有用的。它還可以填充本地測試環(huán)境,讓你不必從頭開始。
要使用 dumpdata 命令,需要運行以下命令:
python manage.py dumpdata
對于這樣一個簡單的模型
from django.db import models
class Author(models.Model):
name = models.CharField(max_length=100)
age = models.IntegerField()
該命令的輸出結(jié)果如下:
[
{
"model": "myapp.author",
"pk": 1,
"fields": {
"name": "John Doe",
"age": 35
}
},
{
"model": "myapp.author",
"pk": 2,
"fields": {
"name": "Jane Smith",
"age": 28
}
}
]
使用 --output 標志為數(shù)據(jù)庫備份文件指定自定義名稱。
雖然運行服務(wù)器、遷移和創(chuàng)建超級用戶等 Django 眾所周知的命令是日常開發(fā)中必不可少的,但探索這些鮮為人知的命令可以大大提高您的生產(chǎn)力和效率。
diffsettings,inspectdb,showmigrations,dbshell 和 dumpdata等命令具有強大的功能,可以簡化調(diào)試、數(shù)據(jù)庫管理和項目維護。通過將這些工具納入工作流程,您可以更精確、更輕松地管理 Django 應(yīng)用程序。
玩轉(zhuǎn)這些命令,看看它們?nèi)绾稳谌肽拈_發(fā)工具包,讓您的 Django 項目更易于管理、更強大。