• 自定义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/

     
     
  • 相关阅读:
    开灯问题
    独木舟上的旅行
    剑指offer--从尾到头打印链表
    映芬视觉网页练习
    游标的使用
    数据库操作
    关系型数据库
    数据库基础知识
    TCPSocket系列二
    HTML5新标签与css3选择器
  • 原文地址:https://www.cnblogs.com/yingqml/p/6553960.html
Copyright © 2020-2023  润新知