commands的建立python
一、在app内建立一个management的python目录 二、在management目录里面建立commands的python文件夹 三、在commands文件夹下建立任意py文件
此时py文件名就是你的自定制命令,能够使用下面方式执行django
python manage.py 命令名
python2环境中,请确保management和management/commands目录内都包含__init__.py
文件ruby
它必须定义一个Command类并扩展自BaseCommand或其 子类。app
其中help是command功能做用简介,handle函数是主处理程序,add_arguments函数是用来接收可选参数的函数
from django.core.management.base import BaseCommand, CommandError from polls.models import Poll 本身的 class 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)
可选参数测试
可以使用add_argument()方法:spa
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() # ...
带参数的测试:命令行
# -*- coding: utf-8 -*- # __author__ = 'dandy' from django.core.management.base import BaseCommand class Command(BaseCommand): def add_arguments(self, parser): parser.add_argument('aaa', nargs='+', type=int) parser.add_argument('--delete', action='store_true', dest='delete', default=False, help='Delete poll instead of closing it') def handle(self, *args, **options): print('test') print(args, options)
options里面直接取参数就能够了。code
返回django版本号:BaseCommand.get_version()
命令的真正逻辑。子类必须实现这个方法。:BaseCommand.handle()
blog
class LabelCommand
这个管理命令接收命令行上的一个或多个参数(标签),并对它们每个都作一些动做。
子类不用实现handle()
,但必须实现handle_label()
,它将会为每一个标签调用一次。
LabelCommand.handle_label(label, **options)
对label完成命令行的动做,label是命令行给出的字符串。