我們都用過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的時候就會常常用到這個功能,特此在這里記錄下來。