官網文檔地址: "編寫自定義 django admin 命令" 金句: 你所浪費的今天,正是昨天死的人所期待的明天。 開篇話: 的命令我們用了很多,要是我們想要使用一些特定的較長的命令時,比如: (命令作用:運行項目測試時,使用指定的配置文件),這時每次運行的就很麻煩,可以通過設定自定義manage ...
官網文檔地址:編寫自定義 django-admin 命令
金句:
你所浪費的今天,正是昨天死的人所期待的明天。
開篇話:
python manage.py <command>
的命令我們用了很多,要是我們想要使用一些特定的較長的命令時,比如:python manage.py test --keepdb --settings=appname.test_settings
(命令作用:運行項目測試時,使用指定的配置文件),這時每次運行的就很麻煩,可以通過設定自定義manage.py命令來實現。
操作步驟要點:
第一步:新建自定義命令模塊
在已有的項目中,在你要設置的項目app下,增加 management/commands
目錄,新建python模塊,模塊名不能以“_”開頭,否則模塊不會被設置為自定義命令。設置的自定義命令為模塊的名字,創建好後的目錄樹如下:
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
的內容:
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=''參數是指定輸出信息後以什麼結尾,不配置參數預設是換行符。`
如果各位有什麼不明白的地方,可以留言回覆。
本文首發於BigYoung小站