【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 這個會更新定時任務


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM