runscript¶
该要: | 在当前项目环境下执行脚本,这个功能非常有用,它能够允许在不启动Django服务的同时以Django项目的环境变量执行脚本方法. |
---|
开始使用¶
首先要在项目根目录下创建一个脚本的目录,名字是 scripts
$ mkdir scripts
$ touch scripts/__init__.py
然后,创建一个想要执行的Python脚本:
$ touch scripts/delete_all_polls.py
这个脚本文件中必须包含 run() 方法, runscript 命令执行时会自动调用该方法.这个脚本中可以引用django项目中的任意模块或数据模型.
例如:
# scripts/delete_all_polls.py
from Polls.models import Poll
def run():
# Get all polls
all_polls = Poll.objects.all()
# Delete polls
all_polls.delete()
提示: runscript 命令可以找到任意app下 scripts 目录中的脚本文件.
用法¶
runscript 命令可以在shell中调用 scripts 目录下的Python脚本.
例如:
$ python manage.py runscript delete_all_polls
提示: runscript 命令会首先检查每个app下的 scripts 目录,如果找到对应名字的脚本就会执行.然后检查 project_root/scripts 目录下是否包含符合名字的脚本,如果找到也会执行.也就是说,我们可以在不同的app中创建相同名字的脚本,并且都会被执行.
参数¶
--script-args 参数可以接收逗号分隔的值,并将其作为参数传递到方法内,例如
$ python manage.py runscript delete_all_polls --script-args=staleonly
例子中 --script-args 参数值作为执行脚本的 run() 方法的参数传入,使用举例
# scripts/delete_all_polls.py
from Polls.models import Poll
def run(*args):
# Get all polls
all_polls = Poll.object.all()
if 'staleonly' in args:
all_polls = all_polls.filter(active=False)
# Delete polls
all_polls.delete()