文章目录
- 一、Django自定义命令
- 二、 Django定时任务
一、Django自定义命令
Django自定义命令文档:https://docs.djangoproject.com/zh-hans/2.2/howto/custom-management-commands/
利用django-admin自定义命令我们可以ORM框架对model进行操作,如:定时更新数据库,检测数据库状态等等。
Django为项目中每一个应用下的management/commands目录中名字没有以下划线开始的Python模块都注册了一个manage.py命令,例如:
代码语言:javascript复制polls/
__init__.py
models.py
management/
__init__.py
commands/
__init__.py
_private.py
closepoll.py
tests.py
views.py
closepoll.py模块只有一个要求 ,它必须定义一个Command类并扩展自Basecommand或其子类
代码语言:javascript复制from django.core.management.base import BaseCommand, CommandError
from polls.models import Question as Poll
class Command(BaseCommand):
help = 'Closes the specified poll for voting'
def add_arguments(self, parser):
parser.add_argument('poll_ids', nargs=' ', type=int)
def handle(self, *args, **options):
for poll_id in options['poll_ids']:
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(self.style.SUCCESS('Successfully closed poll "%s"' % poll_id))
新的自定义命令可以使用python manage.py closepoll 调用。
二、 Django定时任务
下载github地址:https://github.com/kraiz/django-crontab
django-crontab安装:
代码语言:javascript复制pip install django-crontab
只需要将django-crontab加入到settings.py的INSTALLED_APPS即可。如下代码:
代码语言:javascript复制INSTALLED_APPS = (
'django_crontab',
...
)
settings.py中加入django-crontab的命令即可:
代码语言:javascript复制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 这个会更新定时任务