目录

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

    1. 使用格式

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

    2. manage命令简介

    2.1 创建项目 - startproject

    manage startproject pro_name
    

    2.2 创建app - startapp

    manage startapp app_name
    

    2.3 交互环境 - shell

    manage shell
    

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

    2.4 创建模型 - syncdb

    manage syncdb
    

    2.5 启动服务器 - runserver

    manage runserver [IP地址 : 端口号]
    

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

    2.6 确定你使用的版本 - version

    manage version
    

    2.7 检查 - check

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

    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

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

    2.9 反向生成模型 - inspectdb

    manage inspectdb
    

    2.10 数据模型 - validate

    manage validate
    

    2.11 创建缓存表 - createcachetable

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

    2.12 模型产生sql代码 - sql

    manage sql
    

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

    2.13 模型产生sql代码 - sqlall

    manage sqlall
    

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

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

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

    2.15 创建超级管理员 - createsuperuser

    manage createsuperuser
    

    2.16 修改用户密码 - changepassword

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

    2.17 更新数据库修改 - migrate

    manage.py  makemigrations
    

    更新migrations文件

    manage  migrate
    

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

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

    manage diffsettings
    

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

    2.19 导出数据库 - dumpdata

    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

    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)

    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下,创建如下目录即可。

    app/management/commands/__init__.py
    app/management/commands/mycommands.py
    app/managemen/__init__.py
    
    # app/management/commands/mycommands.py
    from django.core.management.base import BaseCommand, CommandError
    
    class Command(BaseCommand):
         def handle(self, *args, **options):
             return 'hello, mycommands!'
    
    # 执行mycommands命令
    manage.py mycommands
    hello, mycommands!
    

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