2014-05-09 13 views
5

Ich möchte diese Funktion jeden Tag um Mitternacht ausführen, um Ablaufdatum-Benachrichtigung zu überprüfen. Was kann ich tun? Ich bin neu in Django und Python.Django - Wie man eine Funktion jeden Tag ausführt?

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() 

Antwort

6

Wie andere gesagt haben, 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") 

Installieren über pip install django-celery

3

Sie entweder ein custom management command und planen Sie die Ausführung mit cron schreiben kann, oder Sie celery verwenden können.

+0

ich zu, um es in benutzerdefinierten Management command..But Planung, welche Art von Funktion sollte ich in Basecommand inherted Klasse geben ?? – nabeel

+0

Ich möchte nicht wirklich eine andere Antwort erstellen, also werde ich einfach versuchen, den Kommentar einzufügen. Erstellen Sie einfach eine Klasse, die von * BaseCommand * erbt, erstellen Sie String-Attribute: * args * und * help *, die eine kurze Beschreibung/Syntaxinformationen für manage.py --help enthalten. Dann definiere eine * handle * -Methode ... und das war's. In dieser Methode können Sie Ihre Funktion importieren und einfach ausführen. Ich kann sehen, dass diese Funktion * wahrscheinlich * eine Ansicht jetzt ist. Aber wenn ich auf seinen Körper schaue, benutzt er das Anfrageobjekt nicht wirklich, also kannst du es einfach arglos lassen und es einfach anrufen. – samu

Verwandte Themen