官網文檔地址:編寫自定義 django-admin 命令python
金句: 你所浪費的今天,正是昨天死的人所期待的明天。
python manage.py <command>
的命令咱們用了不少,要是咱們想要使用一些特定的較長的命令時,好比:python manage.py test --keepdb --settings=appname.test_settings
(命令做用:運行項目測試時,使用指定的配置文件),這時每次運行的就很麻煩,能夠經過設定自定義manage.py命令來實現。shell
在已有的項目中,在你要設置的項目app下,增長 management/commands
目錄,新建python模塊,模塊名不能以「_」開頭,不然模塊不會被設置爲自定義命令。設置的自定義命令爲模塊的名字,建立好後的目錄樹以下:django
appname/ # django項目下的某個app __init__.py models.py management/ commands/ _private.py # 這模塊不會被加入到自定義命令 newtest.py # 這個模塊會被設置爲自定義命令,命令爲模塊名 tests.py views.py
注意:添加自定義命令的app須要在`settings.py`INSTALLED_APPS中註冊。
設置newtest.py
要實現的功能,newtest.py
的內容:app
import os import traceback from django.core.management.base import BaseCommand, CommandError class Command(BaseCommand): def add_arguments(self, parser): parser.add_argument( dest='appname', # 參數名字 type=str, # 參數類型 help='測試哪一個app', # 幫助信息 ) def handle(self, *args, **options): try: shell_info ='python manage.py test %s --keepdb --settings=appname.test_settings' % (options['appname']) os.system(shell_info) self.stdout.write(self.style.SUCCESS('命令%s執行成功, 參數爲%s' % (__file__, options['appname']))) except: self.stdout.write(traceback.format_exc()) self.stdout.write(self.style.ERROR('命令執行出錯'))
以上功能解釋:執行python manage.py newtest appname
時,就會調用test測試,並運行指定的測試專用settings.py配置。測試
注意: 要打印輸出信息,要使用:`self.stdout.write("Unterminated line", ending='')`,`ending=''參數是指定輸出信息後以什麼結尾,不配置參數默認是換行符。`
若是各位有什麼不明白的地方,能夠留言回覆。code
本文首發於 BigYoung小站