zoukankan      html  css  js  c++  java
  • 【Django】Django 定时任务实现(django-crontab+command)

    一、编写自定义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 这个会更新定时任务
  • 相关阅读:
    为什么button在设置标题时要用一个方法,而不像lable一样直接用一个属性
    桥接模式(透传模式)和直驱模式
    vb.net版机房收费系统——教你七层架构(三)—外观模式
    Android 4.4 KitKat NotificationManagerService使用具体解释与原理分析(二)__原理分析
    poj-2758 Checking the Text
    一种感悟,为什么努力了确还是死了一地
    一位程序员的6年总结(转)
    主键生成策略
    Linux下的crontab定时执行任务命令详解
    win7 64下安装mysql-python报错的解决办法
  • 原文地址:https://www.cnblogs.com/perfe/p/6198213.html
Copyright © 2011-2022 走看看