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路径 需要自己新建,如下
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中实现相应的逻辑就可以啦~!