您好,登錄后才能下訂單哦!
小編給大家分享一下Django如何編寫(xiě)自定義manage.py命令,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!
python manage.py <command>
的命令我們用了很多,要是我們想要使用一些特定的較長(zhǎng)的命令時(shí),比如:python manage.py test --keepdb --settings=appname.test_settings
(命令作用:運(yùn)行項(xiàng)目測(cè)試時(shí),使用指定的配置文件),這時(shí)每次運(yùn)行的就很麻煩,可以通過(guò)設(shè)定自定義manage.py命令來(lái)實(shí)現(xiàn)。
在已有的項(xiàng)目中,在你要設(shè)置的項(xiàng)目app下,增加management/commands
目錄,新建python模塊,模塊名不能以“_”開(kāi)頭,否則模塊不會(huì)被設(shè)置為自定義命令。設(shè)置的自定義命令為模塊的名字,創(chuàng)建好后的目錄樹(shù)如下:
appname/ # django項(xiàng)目下的某個(gè)app
__init__.py
models.py
management/
commands/
_private.py # 這模塊不會(huì)被加入到自定義命令
newtest.py # 這個(gè)模塊會(huì)被設(shè)置為自定義命令,命令為模塊名
tests.py
views.py
注意:添加自定義命令的app需要在`settings.py`INSTALLED_APPS中注冊(cè)。
設(shè)置newtest.py
要實(shí)現(xiàn)的功能,newtest.py
的內(nèi)容:
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', # 參數(shù)名字
type=str, # 參數(shù)類型
help='測(cè)試哪個(gè)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執(zhí)行成功, 參數(shù)為%s' % (__file__, options['appname'])))
except:
self.stdout.write(traceback.format_exc())
self.stdout.write(self.style.ERROR('命令執(zhí)行出錯(cuò)'))
以上功能解釋:執(zhí)行python manage.py newtest appname
時(shí),就會(huì)調(diào)用test測(cè)試,并運(yùn)行指定的測(cè)試專用settings.py配置。
注意:要打印輸出信息,要使用:`self.stdout.write("Unterminated line", ending='')`,`ending=''參數(shù)是指定輸出信息后以什么結(jié)尾,不配置參數(shù)默認(rèn)是換行符。`
看完了這篇文章,相信你對(duì)“Django如何編寫(xiě)自定義manage.py命令”有了一定的了解,如果想了解更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。