一、编写自定义django-admin命令
注:利用django-admin自定义命令我们可以ORM框架对model进行操作,如:定时更新数据库,检测数据库状态.....
Django为项目中每一个应用下的management/commands目录中名字没有以下划线开始的Python模块都注册了一个manage.py命令,例如:
polls/ __init__.py models.py management/ __init__.py commands/ __init__.py _private.py closepoll.py tests.py views.py
_private.py将不可以作为一个管理命令使用。
closepoll.py模块只有一个要求 – 它必须定义一个Command类并扩展自Basecommand或其子类
from
django.core.management.base
import
BaseCommand, CommandError
from
polls.models
import
Poll
class
Command(BaseCommand):
help
=
'Closes the specified poll for voting'
#必须实现的方法
def
handle(
self
,
*
args,
*
*
options):
for
poll_id
in
options[
'poll_id'
]:
try
:
poll
=
Poll.objects.get(pk
=
poll_id)
except
Poll.DoesNotExist:
raise
CommandError(
'Poll "%s" does not exist'
%
poll_id)
poll.opened
=
False
poll.save()
self
.stdout.write(
'Successfully closed poll "%s"'
%
poll_id)
|
新的自定义命令可以使用python manage.py closepoll 调用。
二、 django-crontab实现Django定时任务
-
django-crontab安装:
pip
install
django-
crontab
-
django-crontab加入:只需要将
django-crontab
加入到settings.py的INSTALLED_APPS
即可。如下代码:INSTALLED_APPS = (
'django_crontab'
,
...
)
-
django-crontab配置:
settings.py
中加入django-crontab的命令即可:CRONJOBS = [
(
'47 11 * * *'
,
'django.core.management.call_command'
, [
'closepoll'
],{},
'>> /var/run.log'
),
]
格式:
参数1:定时 例如47 11 * * *
表示每天的11时47分执行
参数2:方法的python模块路径,如果执行django-admin命令,则写django.core.management.call_command
参数3:方法的位置参数列表(默认值:[]),如果执行django-admin命令,则填写所需执行的命令,例如我们在polls中已经定义过的closepoll
参数4:方法的关键字参数的dict(默认值:{})
参数5:执行log存放位置(即重定向到文件,默认:'') -
django-crontab任务加载:
django-
crontab
任务加载比较简单,只需要运行 python manage.py
crontab
add 即可
查看已经激活的任务使用 python manage.py
crontab
show
删除已经有的任务使用 python manage.py
crontab
remove
如果你修改了任务记得一定要使用 python manage.py
crontab
add 这个会更新定时任务