Django模板 - 创建一个cron工作,祝生日快乐

时间:2017-01-26 17:29:49

标签: django cron

我在Django中创建了一个模板,它具有祝客户生日快乐的功能。我想以这样的方式设置这个消息,每年都会发送给客户,以便他过生日。我认为最好的方法是创建一个cron作业。但是,我不熟悉cron的工作,我希望得到你的帮助。

我创建了一个属性birthday_date,它会将生日日期设为day month。这是我到目前为止所做的:

#!/bin/bash

MANAGE="../venv/bin/python ../manage.py"

任何人都可以告诉我怎么能这样做?

提前致谢!

2 个答案:

答案 0 :(得分:2)

一个简单的解决方案是创建一个How to set MaxH264SliceBytes property of VTCompressionSession,它将发送当天的生日快乐电子邮件,并通过cronjob每天运行。

这个示例自定义命令,您的可能会有所不同,具体取决于您存储用户数据的方式:

# app/management/commands/send_daily_birthday_greetings.py
"""
Custom management command that sends an email to all users
born on the current day and month.
"""

from django.core.management import BaseCommand
from django.core.mail import send_mail
from django.utils import timezone
from someplace import User



class Command(BaseCommand):
    def handle(self, **options):
        today = timezone.now().date()
        for user in User.objects.filter(birth_date__day=today.day, birth_date__month=today.month):
            subject = 'Happy birthday %s!' % user.first_name
            body = 'Hi %s,\n...' + user.first_name
            send_mail(subject, body, 'contact@yourdomain.com', [user.email])

然后使用crontab -e以这种方式编辑crontab配置:

# m h  dom mon dow   command
0 10 * * * /path/to/your/python/executable/python /path/to/your/manage.py send_daily_birthday_greetings

这将在每天10点发送电子邮件,您可以根据需要更改时间。

答案 1 :(得分:0)

在aumo的答案基础上,如果您正在部署到PaaS,例如Heroku,并且无法安排cron作业,您可以使用honcho和管理命令的组合来安排定期任务。有时将它全部保留在应用程序的一部分而不必编辑其他系统文件(如cron)也是很好的。 honcho

例如,您的Procfile可能如下所示:

web: gunicorn config.wsgi:application
tasks: honcho -f ProcfileHoncho start

您的honcho文件可能如下所示:

clock: python clock.py
reports: python app_name/tasks/reports.py

您的时钟文件调用管理命令:

import os
import subprocess
from apscheduler.schedulers.blocking import BlockingScheduler

sched = BlockingScheduler()

# Morning updates. Times in UTC time.
@sched.scheduled_job('cron', hour=11)
def birthdays():
    os.system('python manage.py send_daily_birthday_greetings')