Please enable Javascript to view the contents

Django 中的 manage 命令

 ·  ☕ 4 分钟

每个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-foreign
    Django将使用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中的命令。


微信公众号
作者
微信公众号