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函数默认 [ ] 问题 讲解的非常详细,
各位大佬如果有什么不足,还请多多指教,共同进步。