2012-04-02 8 views
4

В моем проекте Django пользователям разрешено зарегистрироваться на бесплатную пробную версию, но если они не завершают покупку в течение 15 дней, их учетные записи заблокированы, пока они не завершат покупку. После 13 дней (т. Е. В течение 48 часов или истечения срока действия) я хочу отправить электронное письмо зарегистрированному пользователю, который напомнил ему о покупке.Django: отправка электронной почты через x дней

В настоящее время у меня есть задание cron, настроенное для ежедневного запуска, и проверьте все пробные учетные записи, если дата регистрации и текущая дата разнесены на 2 дня, и если да, отправлю электронное письмо.

Мне было интересно, есть ли более элегантное решение для этого?

+6

Почему это не элегантно? –

+3

Звучит как довольно стандартный способ сделать это со мной. – yoozer8

+0

+1 к обоим другим комментариям. Если вам не нужны более сложные задачи, cronjob кажется самым элегантным решением. –

ответ

0

Если вы не хотите связываться с вашим cron-файлом, вы должны проверить Celery, асинхронную очередь задач, написанную на Python. Он был первоначально создан с учетом Django, но с тех пор был разбит into a separate package. То, что вы хотите сделать, это создать Celerybeat schedule так:

CELERYBEAT_SCHEDULE = { 
    "purchase-reminder": { 
     "task": "accounts.tasks.remind", 
     "schedule": timedelta(hours=24), 
    }, 
} 

Это будет вызывать задачу (читай: функция) accounts.tasks.remind каждые 24 часа.

Смежные вопросы