每个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
如果安装了 IPython 或 bpython ,将被指定为解释器接口。
2.4 创建模型 - syncdb
manage syncdb
2.5 启动服务器 - runserver
manage runserver [IP地址 : 端口号]
本地启用一个轻量级的Web服务器
2.6 确定你使用的版本 - version
2.7 检查 - check
默认情况下,所有应用都将被选中。
如果没有指定任何一个应用,那么将对全部的应用进行检查。
可以使用标记将执行的检查仅限于特定类别中的检查。例如,要仅执行安全性和兼容性检查,运行:python manage.py check –tag security –tag compatibility
列出所有可用的标签
选项激活与部署相关的一些其他检查。python manage.py check –deploy –settings=production_settings
2.8 清空数据库 - flush
- database选项可用于指定要刷新的数据库。
- no-initial-data使用–no-initial-data可避免加载initial_data fixture。
2.9 反向生成模型 - inspectdb
2.10 数据模型 - validate
2.11 创建缓存表 - createcachetable
1
|
manage createcachetable
|
- database选项可用于指定要安装缓存表的数据库
2.12 模型产生sql代码 - sql
将app创建表的sql语句打印出来,并不是真的创建
2.13 模型产生sql代码 - sqlall
打印出所有的创建app的sql语句,包括索引
2.14 数据库引擎命令行客户端 - dbshell
- database选项可用于指定要在其上打开shell的数据库
2.15 创建超级管理员 - createsuperuser
2.16 修改用户密码 - changepassword
1
|
manage changepassword username
|
2.17 更新数据库修改 - migrate
1
|
manage.py makemigrations
|
更新migrations文件
执行数据库脚本中的命令,将models层的修改同步到数据库
2.18 现在配置与默认配置的差异 - diffsettings
显示现在的设置文件和默认的设置文件之间的差异
2.19 导出数据库 - 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
- 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中的命令。