django-admin
和 manage.py
¶
django-admin
是 Django 用于管理任务的命令行实用程序。本文档概述了它可以执行的所有操作。
此外,manage.py
会自动创建在每个 Django 项目中。它执行的操作与 django-admin
相同,但还会设置 DJANGO_SETTINGS_MODULE
环境变量,使其指向项目的 settings.py
文件。
如果您通过 pip
安装了 Django,那么 django-admin
脚本应该位于您的系统路径中。如果它不在您的路径中,请确保您已激活了虚拟环境。
通常,在处理单个 Django 项目时,使用 manage.py
比 django-admin
更容易。如果您需要在多个 Django 设置文件之间切换,请使用 django-admin
以及 DJANGO_SETTINGS_MODULE
或 --settings
命令行选项。
本文档中的命令行示例使用 django-admin
以保持一致性,但任何示例都可以同样使用 manage.py
或 python -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
设置中指定的数据库引擎的命令行客户端,并使用您的USER
、PASSWORD
等设置中指定的连接参数。
对于 PostgreSQL,这将运行
psql
命令行客户端。对于 MySQL,这将运行
mysql
命令行客户端。对于 SQLite,这将运行
sqlite3
命令行客户端。对于 Oracle,这将运行
sqlplus
命令行客户端。
此命令假定程序位于您的PATH
中,以便对程序名称(psql
、mysql
、sqlite3
、sqlplus
)的调用能够在正确的位置找到程序。无法手动指定程序的位置。
- --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 |
+----------------------+
注意
请注意,并非数据库配置的OPTIONS
部分中设置的所有选项都会传递给命令行客户端,例如'isolation_level'
。
diffsettings
¶
- django-admin diffsettings¶
显示当前设置文件与 Django 的默认设置(或由--default
指定的另一个设置文件)之间的差异。
在默认设置中未出现的设置后面会跟着"###"
。例如,默认设置未定义ROOT_URLCONF
,因此ROOT_URLCONF
在diffsettings
的输出中后面跟着"###"
。
- --all¶
显示所有设置,即使它们具有 Django 的默认值。此类设置以"###"
为前缀。
- --default MODULE¶
要将当前设置与其进行比较的设置模块。保留为空以与 Django 的默认设置进行比较。
- --output {hash,unified}¶
指定输出格式。可用值为hash
和unified
。hash
是显示上面描述的输出的默认模式。unified
显示类似于diff -u
的输出。默认设置以减号为前缀,随后是更改的设置以加号为前缀。
dumpdata
¶
- django-admin dumpdata [app_label[.ModelName] [app_label[.ModelName] ...]]¶
将与命名应用程序关联的数据库中的所有数据输出到标准输出。
如果未提供应用程序名称,则将转储所有已安装的应用程序。
dumpdata
的输出可以用作loaddata
的输入。
当dumpdata
的结果保存为文件时,它可以用作夹具用于测试或作为初始数据。
请注意,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(默认值)时,终端会显示进度条。
Fixture 压缩¶
输出文件可以使用 bz2
、gz
、lzma
或 xz
格式进行压缩,方法是在文件名末尾添加相应的扩展名。例如,要将数据输出为压缩的 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
选项时才会为视图创建模型。如果使用 --include-partitions
选项,则在 PostgreSQL 上为分区表创建模型。
如果您有一个希望使用 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¶
如果使用
--include-views
,则为物化视图创建模型。
PostgreSQL¶
为外部表创建模型。
如果使用
--include-views
,则为物化视图创建模型。如果使用
--include-partitions
,则为分区表创建模型。
- --database DATABASE¶
指定要内省的数据库。默认为 default
。
- --include-partitions¶
如果提供此选项,则还会为分区创建模型。
仅支持 PostgreSQL。
- --include-views¶
如果提供此选项,则还会为数据库视图创建模型。
loaddata
¶
- django-admin loaddata fixture [fixture ...]¶
搜索并加载名为 fixture 的内容到数据库中。
- --database DATABASE¶
指定要将数据加载到的数据库。默认为 default
。
- --ignorenonexistent, -i¶
忽略自最初生成 fixture 以来可能已删除的字段和模型。
- --app APP_LABEL¶
指定要查找 fixture 的单个应用程序,而不是在所有应用程序中查找。
- --format FORMAT¶
指定 序列化格式(例如,json
或 xml
)以供 从标准输入读取的 fixture 使用。
- --exclude EXCLUDE, -e EXCLUDE¶
排除从给定应用程序和/或模型(以 app_label
或 app_label.ModelName
的形式)加载夹具。多次使用此选项可排除多个应用程序或模型。
从 stdin
加载夹具¶
您可以使用连字符作为夹具名称,从 sys.stdin
加载输入。例如
django-admin loaddata --format=json -
从 stdin
读取时,需要使用 --format
选项来指定输入的 序列化格式(例如,json
或 xml
)。
使用标准输入和输出重定向时,从 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_ROOT
和 STATIC_ROOT
目录,或包含 LOCALE_PATHS
。
- --all, -a¶
更新所有可用语言的消息文件。
- --extension EXTENSIONS, -e EXTENSIONS¶
指定要检查的文件扩展名列表(默认值:html
、txt
、py
或 js
,如果 --domain
为 djangojs
)。
示例用法
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
文件
- --symlinks, -s¶
在查找新的翻译字符串时,遵循指向目录的符号链接。
示例用法
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¶
允许 Django 跳过应用的初始迁移,如果所有由该迁移中所有 CreateModel
操作创建的模型的表名已经在数据库中存在。此选项旨在首次针对预先存在于使用迁移之前的数据库运行迁移时使用。但是,此选项不会检查除了表名之外的数据库模式匹配,因此仅当您确信现有模式与初始迁移中记录的模式匹配时才安全使用。
- --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]¶
在本地机器上启动一个轻量级的开发 Web 服务器。默认情况下,服务器在 IP 地址 127.0.0.1
的 8000 端口上运行。您可以显式地传入 IP 地址和端口号。
如果您以普通用户权限运行此脚本(推荐),则可能没有权限在低端口号上启动端口。低端口号保留给超级用户(root)。
此服务器使用由 WSGI_APPLICATION
设置指定的 WSGI 应用对象。
警告
不要在生产环境中使用此服务器。
此轻量级开发服务器尚未经过安全审计或性能测试,因此不适用于生产环境。使此服务器能够处理生产环境超出了 Django 的范围。
开发服务器根据需要自动重新加载每个请求的 Python 代码。您无需重新启动服务器即可使代码更改生效。但是,某些操作(如添加文件)不会触发重新启动,因此在这些情况下您需要重新启动服务器。
如果您使用的是 Linux 或 MacOS 并且安装了 pywatchman 和 Watchman 服务,则将使用内核信号自动重新加载服务器(而不是每秒轮询文件修改时间戳)。这在大型项目上提供了更好的性能、减少了代码更改后的响应时间、更强大的更改检测以及降低了功耗。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 字符的主机名。
如果启用了 staticfiles 贡献应用程序(新项目中的默认设置),则 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。默认情况下,如果安装了 IPython 或 bpython,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]
标记)。对于 --verbosity
为 2 及以上的情况,还会显示应用日期时间。
没有迁移的应用也会列出,但在其下方会打印 (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,该 SQL 将修复序列与自动递增字段数据不同步的情况。
- --database DATABASE¶
指定要打印 SQL 的数据库。默认为 default
。
squashmigrations
¶
- django-admin squashmigrations app_label [start_migration_name] migration_name¶
如果可能,将 app_label
的迁移压缩到包括 migration_name
在内的迁移中。生成的压缩迁移可以安全地与未压缩的迁移一起使用。有关更多信息,请阅读 压缩迁移。
当给出 start_migration_name
时,Django 将仅包含从该迁移开始并包括该迁移的迁移。这有助于减轻 RunPython
和 django.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 (http
、https
、ftp
),这些归档文件包含应用模板文件,并会动态下载和解压缩它们。
例如,利用 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__
或以 .
开头的目录将被排除。
用于所有匹配文件的 template 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 文件包含一个解释与模板渲染相关的特定功能的文档字符串,则可能会导致示例不正确。
要解决此问题,可以使用 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__
或以 .
开头的目录将被排除。
使用的 template context
为
传递给
startproject
命令的任何选项(在命令支持的选项中)project_name
– 传递给命令的项目名称project_directory
– 新创建项目的完整路径secret_key
– 用于SECRET_KEY
设置的随机密钥docs_version
– 文档版本:'dev'
或'1.x'
django_version
– Django 版本,例如'2.0.3'
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 日志记录。如果 --verbosity
是 2
,则还会输出通过测试中的查询。
- --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's -k option
的方式相同。可以多次指定。
- --pdb¶
在每个测试错误或失败时生成一个 pdb
调试器。如果您已安装,则使用 ipdb
代替。
- --buffer, -b¶
丢弃通过测试的输出(stdout
和 stderr
),与unittest's --buffer option
的方式相同。
- --no-faulthandler¶
Django 在启动测试时自动调用 faulthandler.enable()
,这允许它在解释器崩溃时打印回溯。传递 --no-faulthandler
以禁用此行为。
- --timing¶
输出计时信息,包括数据库设置和总运行时间。
- --durations N¶
显示 N 个最慢的测试用例(N=0 表示所有用例)。
Python 3.12 及更高版本
此功能仅适用于 Python 3.12 及更高版本。
testserver
¶
- django-admin testserver [fixture [fixture ...]]¶
使用给定夹具的数据运行 Django 开发服务器(如runserver
中所示)。
例如,此命令
django-admin testserver mydata.json
…将执行以下步骤
创建测试数据库,如测试数据库 中所述。
使用给定夹具中的夹具数据填充测试数据库。(有关夹具的更多信息,请参阅上面
loaddata
的文档。)运行 Django 开发服务器(如
runserver
中所示),指向此新创建的测试数据库而不是您的生产数据库。
这在许多方面都很有用
当您编写单元测试 以了解您的视图如何在某些夹具数据下运行时,您可以使用
testserver
在 Web 浏览器中手动与视图交互。假设您正在开发 Django 应用程序,并且有一个数据库的“原始”副本,您希望与之交互。您可以将数据库转储到一个夹具(使用
dumpdata
命令,如上所述),然后使用testserver
使用该数据运行您的 Web 应用程序。通过这种安排,您可以灵活地以任何方式弄乱您的数据,因为您知道您所做的任何数据更改都只在测试数据库中进行。
请注意,此服务器不会自动检测您 Python 源代码的更改(如runserver
所做的那样)。但是,它确实检测模板的更改。
- --addrport ADDRPORT¶
指定与默认值127.0.0.1:8000
不同的端口或 IP 地址和端口。此值完全遵循与runserver
命令的参数相同的格式并执行完全相同的功能。
示例
要在端口 7000 上运行测试服务器,并使用fixture1
和fixture2
django-admin testserver --addrport 7000 fixture1 fixture2
django-admin testserver fixture1 fixture2 --addrport 7000
(以上语句等效。我们同时包含这两个语句是为了说明选项在夹具参数之前还是之后出现都没有关系。)
在 1.2.3.4:7000 上运行,并使用test
夹具
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 的contenttypes 应用程序(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
)时,此命令才可用。
请参阅staticfiles文档中的描述
。
findstatic
¶
仅当安装了静态文件应用程序(django.contrib.staticfiles
)时,此命令才可用。
请参阅description
在staticfiles文档中的说明。
默认选项¶
尽管某些命令可能允许其自己的自定义选项,但每个命令默认都允许以下选项
- --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
时,显示完整的堆栈跟踪。默认情况下,django-admin
会在发生CommandError
时显示错误消息,并为任何其他异常显示完整的堆栈跟踪。
此选项被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 终端应用程序、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"
将指定使用 light 调色板中的所有颜色,除了错误和通知的颜色,这些颜色将按指定覆盖。
Bash 自动完成¶
如果您使用 Bash shell,请考虑安装 Django bash 自动完成脚本,该脚本位于 Django 源代码分发版中的extras/django_bash_completion。它支持django-admin
和manage.py
命令的制表符自动完成,因此您可以例如…
键入
django-admin
。按[TAB]以查看所有可用选项。
键入
sql
,然后按[TAB],以查看名称以sql
开头的所有可用选项。
有关如何添加自定义操作,请参阅如何创建自定义 django-admin 命令。
Black 格式化¶
由 startproject
、startapp
、optimizemigration
、makemigrations
和 squashmigrations
创建的 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)
请注意,不带参数的命令选项作为带有 True
或 False
的关键字传递,如上所示的 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-admin
或 manage.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()
方法的返回值相同。
输出重定向¶
请注意,您可以重定向标准输出和错误流,因为所有命令都支持 stdout
和 stderr
选项。例如,您可以编写
with open("/path/to/command_output", "w") as f:
management.call_command("dumpdata", stdout=f)