您应该能够使用 mixins 对代码进行分区(不过,我没有在这种情况下尝试过)
一个标准的管理命令看起来像
from django.core.management.base import BaseCommand
class Command(BaseCommand):
help = 'FIXME A helpful comment goes here'
def add_arguments(self, parser):
parser.add_argument( 'name', ...)
# more argument definitions
def handle(self, *args, **options):
# do stuff
这可能可以被以下中的“存根”替换app/management/commands
:
from wherever.commands import FooCommandMixin
from django.core.management.base import BaseCommand
class Command(FooCommandMixin, BaseCommand):
# autogenerated -- do not put any code in here!
pass
并在任何地方/命令
class FooCommandMixin( object):
help = 'FIXME A helpful comment goes here'
def add_arguments(self, parser):
parser.add_argument( 'name', ...)
# more argument definitions
def handle(self, *args, **options):
# do the work
编写一个脚本来遍历文件名或路径列表(使用 glob.glob)使用 re.findall 来识别适当的类声明,并为应用程序管理中的每个(重新)生成匹配的存根并不难/命令文件夹。
另外/相反,Python 的 argparse 允许定义 sub-commands。所以你应该能够定义一个像
./manage.py foo bar --aa --bb something --cc and
./manage.py foo baz --bazzy a b c
其中 foo 之后的语法由下一个单词(bar 或 baz 或 ...)确定。同样,我没有在这种情况下使用子命令的经验。