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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM