1. 程式人生 > >編寫Django自定義manage命令

編寫Django自定義manage命令

manage.py是在我們建立Django專案的時候就自動生成在根目錄下的一個命令列工具,它可以執行一些簡單的命令,其功能是將Django project放到sys.path目錄中,同時設定DJANGO_SETTINGS_MODULE環境變數為當前project的setting.py檔案。manage.py的程式碼是這樣的:

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

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

    from django.core.management import execute_from_command_line

    execute_from_command_line(sys.argv)
excute_from_command_line()函式會根據命令列引數解析出命令的名稱,根據命令名稱呼叫相應的Command執行命令。Command位於各個管理模組的commands模組下面。

所以要自定義manage命令,只需要在app下management目錄commands目錄下建立目標檔案。

需要注意的是,不是所有的.py檔案都會被識別為命令的,需引用了BaseCommand的才能被正確識別,而且我們的命令類要繼承於BaseCommand它才可以。

示例程式碼:

from django.core.management.base import BaseCommand,CommandError      
import datetime
import pytz

class Command(BaseCommand):
    def handle(self, *args, **options):
        now=datetime.datetime.now()
        now=now.replace(hour=0).replace(minute=0).replace(second=0).replace(microsecond=0).replace(tzinfo=pytz.timezone('UTC'))
        br1=datetime.datetime(2016,6,29)
        br1=br1.replace(hour=0).replace(minute=0).replace(second=0).replace(microsecond=0).replace(tzinfo=pytz.timezone('UTC'))
        br2=now
        print br1,br2