自定义Django Command

转:

django的command命令是要放在一个app的management/commands目录下。python2环境中,请确保management和management/commands目录内都包含__init__.py文件

例如command文件名为closepoll.py,对此模块只有唯一的要求,它必须定义一个command类并扩展自BaseCommand或其子类

from django.core.management.base import BaseCommand,CommandError

from polls.models import Poll

class Command(BaseCommand):

  help='Close the specified poll for voting'

  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)

接受可选参数

可使用add_argument()方法

class Command(BaseCommand):

  def add_argument(self,parser):

    #postional 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()

方法

返回django版本号:BaseCommand.get_version() 
命令的真正逻辑。子类必须实现这个方法。:BaseCommand.handle()

BaseCommand的子类

class LabelCommand

这个管理命令接收命令行上的一个或多个参数(标签),并对它们每一个都做一些动作。

子类不用实现handle(),但必须实现handle_label(),它将会为每个标签调用一次。

LabelCommand.handle_label(label, **options)

对label完成命令行的动作,label是命令行给出的字符串。

怎么运行写好的command文件,给django-command写option选项

python manage.py 文件名.py [app名字]

转:http://www.codeweblog.com/%E7%BB%99django-command%E5%86%99option%E9%80%89%E9%A1%B9/

原文:https://docs.djangoproject.com/en/1.8/howto/custom-management-commands/

 
 
原文地址:https://www.cnblogs.com/yingqml/p/6553960.html