Django分析之如何自定义manage命令

      我们都用过Django的manage.py的命令,而manage.py是在我们创建Django项目的时候就自动生成在根目录下的一个命令行工具,它可以执行一些简单的命令,其功能是将Django project放到sys.path目录中,同时设置DJANGO_SETTINGS_MODULE环境变量为当前project的setting.py文件。我们来看一下代码:

#!/usr/bin/env python
import os
import sys

if __name__ == "__main__":
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "SNCRM.settings")

    from django.core.management import execute_from_command_line

    execute_from_command_line(sys.argv)

在这里脚本会根据execute_from_command_line()方法里传入的命令来执行相应的结果。也就是说我们可以自己去编写这个函数可以识别的命令,这样就可以很大程度上的去拓展manage.py的功能了。

     那么我们该如何去写这样一个自定义的manage命令呢?

首先,我们要在apps模块下建立名字为management的模块,这样Django才能自动发现我们的命令,这样在我们新建立的management模块中就可以建立我们需要的命令了,当然了,不是所有的py文件系统都会识别为命令的,只有引用了BaseCommand的才能被正确识别,而且我们的命令类要继承于BaseCommand它才可以。下面就用代码来演示一下:

#django command import
from django.core.management.base import BaseCommand

class Command(BaseCommand):
    def handle(self, *args, **options):
          print 'hello, World !'

这是一个最基本的命令了,使用的时候我们只需要在manage.py后面输入命令的文件名就可以了。

     当然,上面的例子是最简单了例子,一般都是在对项目进行初始化的时候才会使用到这个功能,所以我们的脚本一般都会是对数据库的操作,尤其是我们的项目使用了第三方的ORM框架的时候这个功能就显得尤为重要了,因为Django的syncdb命令是不能初始化第三方的ORM的,只能是初始化Django自带的ORM,所以我在使用SQLAlchemy这样的其他ORM的时候就会常常用到这个功能,特此在这里记录下来。

posted @ 2014-12-21 15:43  F-happy  阅读(4020)  评论(0编辑  收藏