自定义django-admin 带参数管理命令

2021年2月7日 Jerry 2889 2021年2月7日

django应用时,我们时常需要自定义自己所需的命令进行相关操作,那如何自定义django-admin 管理命令呢?又如何自定义带参数的管理命令呢?这篇博客给出个简单的例子。

首先,在django 应用中,我们自定义一个加减法的命令,具体要实现的命令行如下:

计算 x+y+z
python manage.py compute + x y z       

计算 x-y-z
python manage.py compute - x y z

1、首先创建 compute.py文件,文件路径是 testapp/management/commands     如果没有management/commands路径 需要自己新建,如下

自定义django-admin命令

2、compute.py文件内容如下:

# coding: utf-8
from django.core.management.base import BaseCommand, CommandError

class Command(BaseCommand):
    def add_arguments(self, parser):
        parser.add_argument('operator', nargs='*', type=str, help='add')

    def handle(self, *args, **options):
        print(options['operator'])
        if options['operator'][0] == '+':
            result = 0
            for i in range(1, len(options['operator'])):
                result = result + int(options['operator'][i])
            print(result)
        elif options['operator'][0] == '-':
            result = int(options['operator'][1])
            for i in range(2, len(options['operator'])):
                result = result - int(options['operator'][i])
            print(result)
        else:
            pass

说一下上面的代码,具体的教程大家可以参考官方文件:官方介绍

def add_arguments(self, parser):
    parser.add_argument('operator', nargs='*', type=str, help='add')

上述代码的作用是定义operator运算符参数,nargs可选的参数有“?”"+" "*",“?”用于0个或1个参数传入,“+”和“*”都用于1个或多个参数的传入,区别在于“+”不支持0个参数,而“*”支持0个参数,说起来有些抽象,看下面这个例子说明:

1、当 nargs='?' 时
输入 python manage.py compute + 命令 此时可以读到 参数:“+“
输入 python manage.py compute 命令,也不会报错

2、当nargs='+' 时
输入 python manage.py compute 命令会报错,告诉你缺了一个参数
输入 python manage.py compute + 命令,都可以读取到 + 
输入 python manage.py compute + 1 2 3 命令,都可以读取到 + 1 2 3

3、当nargs='*' 时
输入 python manage.py compute 命令不会报错
输入 python manage.py compute + 命令,都可以读取到 + 
输入 python manage.py compute + 1 2 3 命令,都可以读取到 + 1 2 3

接下来,下面这个handle函数作用就是用于命令具体的逻辑实现:

def handle(self, *args, **options):
    print(options['operator'])

其中,options['operator']可以获取到输入的多个参数,于是上面的代码执行逻辑就是:

当输入 python manage.py compute + 1 1 1  时,检测到运算符是 + ,于是输出1+1+1=3

python manage.py compute + 1 1 1
['+', '1', '1', '1']
3

当输入python manage.py compute - 1 1 1 时,检测到运算符是 - ,于是输出1-1-1 = -1

python manage.py compute - 1 1 1
['-', '1', '1', '1']
-1

具体的参数定义就是这样,只要在handle中实现相应的逻辑就可以啦~!


原创文章,转载请注明出处: https://jerrycoding.com/article/django-cmd

微信
jerry微信赞助
支付宝
jerry支付宝赞助

您尚未登录,暂时无法评论。请先 登录 或者 注册

0 人参与 | 0 条评论