博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Django--自定义 Command 命令
阅读量:5098 次
发布时间:2019-06-13

本文共 2572 字,大约阅读时间需要 8 分钟。

Django 对于命令的添加有一套规范,你可以为每个app 指定命令。通俗一点讲,比如在使用manage.py文件执行命令的时候,可以自定制自己的命令,来实现命令的扩充。

commands的创建

1、在app内创建一个management的python目录2、在management目录里面创建commands的python文件夹3、在commands文件夹下创建任意py文件

此时py文件名就是你的自定制命令,可以使用下面方式执行

python manage.py 命令名

Django的Command命令是要放在一个app的management/commands目录下的。

 python2环境中,请确保management和management/commands目录内都包含__init__.py文件

 

首先对于文件名没什么要求,内部需要定义一个Command类并继承BaseCommand类或其子类。

它必须定义一个Command类并扩展自BaseCommand或其 子类。

其中help是command功能作用简介,handle函数是主处理程序,add_arguments函数是用来接收可选参数的

from django.core.management.base import BaseCommand, CommandErrorfrom 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()方法:

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 BaseCommandclass 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里面直接取参数就可以了。

方法

返回django版本号:BaseCommand.get_version() 

命令的真正逻辑。子类必须实现这个方法。:BaseCommand.handle()

BaseCommand的子类

class LabelCommand

 

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

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

LabelCommand.handle_label(label, **options)

 

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

 

转载于:https://www.cnblogs.com/polly-ling/p/9830060.html

你可能感兴趣的文章
如何将u盘、移动硬盘转化为活动分区--绝招
查看>>
MYSQL 5.7 修改密码、登录问题
查看>>
linux 同步时间 调试core内核
查看>>
PAT Basic 1085
查看>>
springMVC传递一组对象的接受方式
查看>>
收藏一个虚函数表以及虚表指针介绍的文章
查看>>
POJ---2492 A Bug's Life[并查集]
查看>>
[BZOJ1195] [HNOI2006]最短母串
查看>>
final阶段140字评论
查看>>
zookeeper集群搭建
查看>>
Jenkins-在windows上配置自动化部署(Jenkins+Gitblit)
查看>>
ng-if可见
查看>>
[AGC003]E - Sequential operations on Sequence
查看>>
Effective JAVA 思维导图
查看>>
【转】mysqldump
查看>>
Python Matplotlib作图指南
查看>>
2. Struts2 基础
查看>>
人见人爱,花见花开的数据库
查看>>
关于<context:property-placeholder>的一个有趣现象
查看>>
XigmaNAS中virtualbox无法启动问题
查看>>