Django脚本,manage.py启动脚本,自定义扩展manage命令,继承BaseCommand

Python manage.py data_info --test XXX 执行脚本
自定义Django脚本

项目环境:
Python: 2.7
Django: 1.9

目录结构

在项目的app的目录下建立 management 文件夹,然后在management 文件夹中的 建立commands 文件夹和__init__.py文件,最后在commands 文件夹中添加一个py文件,名称我写的是data_info.py,别忘了在commands文件夹中添加__init__.py文件。

具体的目录结构如下,一目了然:
—— blog		# App名称
    └── management 	
 	   |—— __init__.py
 	   └── commands 	
 		  |—— __init__.py			# 脚本文件所在位置,与__init__文件在一起
 		  └── data_info.py			# 脚本文件

脚本文件内容

# _*_ encoding:utf-8 _*_

from django.core.management import BaseCommand
from baseinfo.models import ChatInfo

class Command(BaseCommand):

    # 传递参数 --可选
    def add_arguments(self, parser):
    	# 不传递参数默认为all,全部数据
        parser.add_argument('--par',dest='par',default='all')
	
	# 处理数据
    def deal_info(self,data_list=None):
        if not data_list:
            # 全部数据
            obj_info = ChatInfo.objects.all()
        else:
            obj_info = ChatInfo.objects.filter(id__in=data_list)
        # 更新数据库字段
        obj_info.update(is_point=True)

	# 执行脚本里面的方法
    def handle(self, *args, **options):
        try:
	        par = options.get('par','')
	        if not par:
	            print '获取参数失败!'
	        # 获取全部
	        if par == 'all':
	            print u'全部数据'
	            self.deal_info()
	        else:
	        	# 字符串切割转int类型
	            par_list = map(lambda x:int(x),par.split(','))
	            self.deal_info(par_list)
		except Exception as e:
            print 'data_info ERROR: %s' % e        

执行脚本方法

△△△

在Django文件目录下执行命令,或者执行命令时指定文件位置

python manage.py data_info      			# 不传参数,par值默认为all
python manage.py data_info --par 1,2,3,4	# 传递参数1,2,3,4
python manage.py data_info --par all 		# 传递all参数,与第一个命令相同

不知道可以执行那些脚本可以使用命令:

python manage.py

这样就能看到有哪些脚本可以执行

*********************************** 分割线******************************************************************

注意,注意,注意

在上面deal_info方法中为啥不用data_list=[],默认空列表,这里说明一下,不可以这样使用,
当定义函数时,会保存函数中默认参数list的值,也就是列表[],在每次调用的时候如果传递了列表,则使用传递的列表,没有传递,使用定义函数时保存的默认参数list

简单来说就是当我两次调用函数时,都不传递data_list参数,使用默认的[]值。
这样就会导致第二次执行函数时,使用的list列表为第一次执行函数时的结果列表,

具体可以参考:Python函数默认 [ ] 问题 讲解的非常详细,


各位大佬如果有什么不足,还请多多指教,共同进步。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值