写点什么

Django 如何编写自定义 manage.py 命令

用户头像
BigYoung
关注
发布于: 2020 年 08 月 11 日
Django如何编写自定义manage.py 命令

官网文档地址:编写自定义 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.pyINSTALLED_APPS 中注册。

第二步:编写自定义命令功能

设置newtest.py要实现的功能,newtest.py的内容:

import osimport tracebackfrom 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 小站(http://www.bigyoung.cn)

发布于: 2020 年 08 月 11 日阅读数: 70
用户头像

BigYoung

关注

Python工程师/书虫/极客/ 2020.04.22 加入

伸手摘星,即使徒劳无功,也不至于满手泥污。 欢迎大家访问我的BigYoung小站(bigyoung.cn)

评论 (1 条评论)

发布
用户头像
mark
2020 年 08 月 11 日 18:59
回复
没有更多了
Django如何编写自定义manage.py 命令