Django 自定义管理员命令

来源:互联网 发布:网络语打卡失败 编辑:程序博客网 时间:2024/06/05 04:47

Django 自定义管理员命令

在Django之中可以自定义管理员命令,通常是有两种做法的,一种是对单个app定义manage命令,对于该app所做的一些处理。一种是对整个工程所作用的manage命令,用来启动某些service。

注册manage命令只需要在app中创建一个management/commands路径,Django会自动将该路径下不以’_’开头的文件注册为manage.py的命令。

如下路径:

polls/    __init__.py    models.py    management/        __init__.py        commands/            __init__.py            _private.py            closepoll.py    tests.py    views.py

对于注册的manage.py命令closepoll仅仅需要满足将一个条件 —— 其必须定义一个继承自BaseCommand或者其子类的Command类。

如下:

from django.core.management.base import BaseCommand, CommandErrorfrom polls.models import Pollclass Command(BaseCommand):    help = 'Closes the specified poll for voting'    def add_arguments(self, parser):        parser.add_argument('poll_id', nargs='+', type=int)    def handle(self, *args, **options):        for poll_id in options['poll_id']:            try:                poll = Poll.objects.get(pk=poll_id)            except Poll.DoesNotExist:                raise CommandError('Poll "%s" does not exist' % poll_id)            poll.opened = False            poll.save()            self.stdout.write('Successfully closed poll "%s"' % poll_id)

这个例子之中将Poll应用之下的Poll model之中的数据的opened设置为False。
从这个例子就可以看出,manage命令常见的一个应用场景就是独立脚本。

增加可选参数

Command提供了一个方法用来增加可选的参数——add_arguments()

class Command(BaseCommand):    def add_arguments(self, parser):        # Positional arguments        parser.add_argument('poll_id', nargs='+', type=int)        # Named (optional) arguments        parser.add_argument('--delete',            action='store_true',            dest='delete',            default=False,            help='Delete poll instead of closing it')    def handle(self, *args, **options):        # ...        if options['delete']:            poll.delete()        # ...

这种设计就是传入参数如–delete, 所有的manager都有默认的选项–verbosity和–traceback。

0 0
原创粉丝点击