Django 中的 manage 命令

2023年 1月 4日 49.7k 0

每个Django项目中都会自动生成一个manage.py文件。manage.py是对django-admin的一个简单包装,其功能是将Django Project放到sys.path目录中,设置 DJANGO_SETTINGS_MODULE 环境变量为当前Project的setting.py 文件。也就是说django-admin与manage的差别在于,manage设置了项目的环境变量。

1. 使用格式

1
2
django-admin [command] [options]
manage.py [command] [options]

2. manage命令简介

2.1 创建项目 - startproject

1
manage startproject pro_name

2.2 创建app - startapp

1
manage startapp app_name

2.3 交互环境 - shell

1
manage shell

如果安装了 IPython 或 bpython ,将被指定为解释器接口。

2.4 创建模型 - syncdb

manage syncdb

2.5 启动服务器 - runserver

manage runserver [IP地址 : 端口号]

本地启用一个轻量级的Web服务器

2.6 确定你使用的版本 - version

1
manage version

2.7 检查 - check

默认情况下,所有应用都将被选中。

1
python manage.py check

如果没有指定任何一个应用,那么将对全部的应用进行检查。

  • tag

可以使用标记将执行的检查仅限于特定类别中的检查。例如,要仅执行安全性和兼容性检查,运行:python manage.py check –tag security –tag compatibility

  • list-tags

列出所有可用的标签

  • deploy

选项激活与部署相关的一些其他检查。python manage.py check –deploy –settings=production_settings

2.8 清空数据库 - flush

1
manage flush
  • database选项可用于指定要刷新的数据库。
  • no-initial-data使用–no-initial-data可避免加载initial_data fixture。

2.9 反向生成模型 - inspectdb

1
manage inspectdb

2.10 数据模型 - validate

1
manage validate

2.11 创建缓存表 - createcachetable

1
manage createcachetable
  • database选项可用于指定要安装缓存表的数据库

2.12 模型产生sql代码 - sql

1
manage sql

将app创建表的sql语句打印出来,并不是真的创建

2.13 模型产生sql代码 - sqlall

1
manage sqlall

打印出所有的创建app的sql语句,包括索引

2.14 数据库引擎命令行客户端 - dbshell

1
manage dbshell
  • database选项可用于指定要在其上打开shell的数据库

2.15 创建超级管理员 - createsuperuser

1
manage createsuperuser

2.16 修改用户密码 - changepassword

1
manage changepassword username
  • database选项指定要为用户查询的数据库

2.17 更新数据库修改 - migrate

1
manage.py  makemigrations

更新migrations文件

1
manage  migrate

执行数据库脚本中的命令,将models层的修改同步到数据库

2.18 现在配置与默认配置的差异 - diffsettings

1
manage diffsettings

显示现在的设置文件和默认的设置文件之间的差异

2.19 导出数据库 - dumpdata

1
manage dumpdata
  • format 默认情况下,dumpdata将以JSON格式输出其输出,但您可以使用–format选项指定另一种格式。目前支持的格式列在Serialization formats中。
  • indent 默认情况下,dumpdata将在一行上输出所有数据。这对于人类来说不容易阅读,因此您可以使用–indent选项来漂亮地打印具有多个缩进空格的输出。
  • exclude选项以防止特定应用或模型(以app_label.ModelName)。如果将模型名称指定为dumpdata,则转储的输出将限制为该模型,而不是整个应用程序。您还可以混合应用程序名称和型号名称。
  • database选项可用于指定要从中转储数据的数据库。
  • natural-foreignDjango将使用natural_key()模型方法将任何外键和多对多关系序列化到定义方法的类型的对象。
  • pks默认情况下,dumpdata将输出模型的所有记录,但您可以使用–pks选项指定要过滤的主键的逗号分隔列表。这仅在转储一个模型时可用。
  • output缺省,dumpdata命令会将所有经序列化之后的数据输出到标准输出。使用–output选项允许指定数据被写入的文件。

2.20 导入数据 - loaddata

1
manage loaddata
  • database选项可用于指定要将数据加载到的数据库。
  • ignorenonexistent选项可用于忽略可能自灯具最初生成后移除的字段和模型。
  • app选项可用于指定单个应用程序来查找fixture,而不是浏览所有应用程序。

2.21 获取运行时帮助 - help

  • 运行 manage help显示使用信息和每个应用的命令列表
  • 运行 manage help –commands显示一个包含所有可用命令的列表
  • 运行 manage help 来显示某一个命令的描述及其可用的命令列表。

3. 从代码运行管理命令

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

1
2
3
4
5
6
7
from django.core.management import call_command
call_command('flush', verbosity=0, interactive=False)
call_command('loaddata', 'test_data', verbosity=0)
call_command('dumpdata', '--natural-foreign')
call_command('dumpdata', exclude=['contenttypes', 'auth'])
with open('./command_output') as f:
    call_command('dumpdata', stdout=f)

4. 定制manage命令

在项目的开发过程中,难免需要一些特殊的处理操作。那么问题来了,如何避免这些重复操作呢?没错,那就是定制自己的manage命令。Django通过django.core.management中的find_commands和get_commands函数查找命令,也就是django.core和每个app的management/commands目录下查找命令。知道了原理,那么,只需要在自己的app下,创建如下目录即可。

1
2
3
app/management/commands/__init__.py
app/management/commands/mycommands.py
app/managemen/__init__.py
1
2
3
4
5
6
# app/management/commands/mycommands.py
from django.core.management.base import BaseCommand, CommandError

class Command(BaseCommand):
     def handle(self, *args, **options):
         return 'hello, mycommands!'
1
2
3
# 执行mycommands命令
manage.py mycommands
hello, mycommands!

更详细的写法,可以参考django.core.management.commands中的命令。

相关文章

KubeSphere 部署向量数据库 Milvus 实战指南
探索 Kubernetes 持久化存储之 Longhorn 初窥门径
征服 Docker 镜像访问限制!KubeSphere v3.4.1 成功部署全攻略
那些年在 Terraform 上吃到的糖和踩过的坑
无需 Kubernetes 测试 Kubernetes 网络实现
Kubernetes v1.31 中的移除和主要变更

发布评论