2014-05-09 14 views
5

Chcę uruchomić tę funkcję codziennie o północy, aby sprawdzić date_date_notification. co mogę zrobić? Jestem nowy w Django i Pythonie.Django - Jak uruchomić funkcję CODZIENNIE?

def check_expiry_date(request): 
    products = Product.objects.all() 
    for product in products: 
     product_id = product.id 
     expiry_date = product.expiry_date 
     notification_days = product.notification_days 
     check_date = int((expiry_date - datetime.datetime.today()).days) 
     if notification_days <= check_date: 
      notification = Notification(product_id=product_id) 
      notification.save() 

Odpowiedz

6

Jak powiedzieli inni, Celery can schedule tasks to execute at a specific time.

from celery.schedules import crontab 
from celery.task import periodic_task 

@periodic_task(run_every=crontab(hour=7, minute=30, day_of_week="mon")) 
def every_monday_morning(): 
    print("This is run every Monday morning at 7:30") 

zainstalować poprzez pip install django-celery

3

Można też napisać custom management command i harmonogram jego realizacji za pomocą crona, lub użyć celery.

+0

Zamierzam do niej zarządzania zwyczaj command..But jaką funkcję powinien daję w Basecommand inherted klasy ?? – nabeel

+0

Naprawdę nie chcę tworzyć kolejnej odpowiedzi, więc spróbuję dopasować komentarz. Po prostu utwórz klasę, która dziedziczy po * BaseCommand *, utwórz atrybuty ciągów: * args * i * help * zawierające krótki opis/informacje o składni dla manage.py --help. Następnie zdefiniuj metodę * handle * ... i to wszystko. W tej metodzie możesz zaimportować swoją funkcję i po prostu ją wykonać. Widzę, że ta funkcja jest * prawdopodobnie * widokiem właśnie teraz. Ale kiedy patrzę na jego ciało, nie korzysta z obiektu żądania, więc możesz po prostu pozostawić go bez odpowiedzi i po prostu go nazwać. – samu

Powiązane problemy