2017-07-24 42 views
0

我想使用django Kronos比較會員模型的'end_date'和今天的每一個1.a.m.如何自動運行django kronos

因此,我安裝了'django-Kronos'並在已安裝的應用程序中寫入了'Kronos'。

我在項目的根目錄下創建了該文件。

from staff.models import Member 
from datetime import timedelta 
import datetime 
import kronos 
import random 

@kronos.register('1 * * * *') 
def the_task(): 
    today = datetime.date.today() 
    Member.objects.filter(end_date__lte=today).update(Membership_status=0) 

爲了測試,我寫python manage.py runtask the_task 但是,CommandError: Task 'the_task' not found發生。

我如何自動運行cron.py?

回答

0

如果您不特別使用kronos,可以將其設置爲管理命令,以便您可以從終端運行它,如:$ python manage.py the_task

從那裏你可以從你的操作系統運行它作爲一個cronjob,或許多託管公司提供可用於運行這樣的計劃任務。

要建立一個管理命令,在您的應用程序目錄中,創建以下目錄結構:管理/命令/

命令目錄中創建一個名爲Python文件:the_task.py和編輯它包含以下代碼:

from django.core.management.base import BaseCommand, CommandError 
from staff.models import Member 
from datetime import timedelta 
import datetime 

class Command(BaseCommand): 

    args = '' 

    def handle(self, *args, **options): 

     today = datetime.date.today() 
     Member.objects.filter(end_date__lte=today).update(Membership_status=0) 

我發現做這樣簡單得多,不需要庫除了標準的Django,並且是容易測試的,因爲你可以從終端上運行它。

+0

如果我的某個應用名稱是「管理」,我應該創建管理/管理/命令目錄路徑,對不對?我如何讓代碼每隔1.a.m自動運行? – Julia

+0

正確。在凌晨1點自動運行代碼取決於您正在測試的操作系統,然後是您的項目部署到的操作系統。在基於Unix的系統上,您可以使用'cron',在Windows上使用'at'。你在開發/部署什麼操作系統? – Sam

+0

我正在使用Windows。你能告訴我更多關於使用'at'的細節嗎? – Julia