Django编写自定义manage.py 命令
程序员文章站
2022-03-08 13:24:39
官网文档地址: "编写自定义 django admin 命令" 金句: 你所浪费的今天,正是昨天死的人所期待的明天。 开篇话: 的命令我们用了很多,要是我们想要使用一些特定的较长的命令时,比如: (命令作用:运行项目测试时,使用指定的配置文件),这时每次运行的就很麻烦,可以通过设定自定义manage ......
官网文档地址:
金句: 你所浪费的今天,正是昨天死的人所期待的明天。
开篇话:
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小站