首页 > 代码库 > 自定义Django Command
自定义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/
自定义Django Command