【愚公系列】2022年02月 Python教学课程 59-Django框架之定时任务和自定义命令

举报
愚公搬代码 发表于 2022/02/06 16:13:15 2022/02/06
【摘要】 一、Django自定义命令Django自定义命令文档:https://docs.djangoproject.com/zh-hans/2.2/howto/custom-management-commands/利用django-admin自定义命令我们可以ORM框架对model进行操作,如:定时更新数据库,检测数据库状态等等。Django为项目中每一个应用下的management/comman...

一、Django自定义命令

Django自定义命令文档:https://docs.djangoproject.com/zh-hans/2.2/howto/custom-management-commands/

利用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

closepoll.py模块只有一个要求 ,它必须定义一个Command类并扩展自Basecommand或其子类

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安装:

pip install django-crontab

只需要将django-crontab加入到settings.py的INSTALLED_APPS即可。如下代码:

INSTALLED_APPS = (
'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 这个会更新定时任务

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。