Django編寫自定義manage.py 命令

官網文檔地址:編寫自定義 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小站
相關文章
相關標籤/搜索