我在Django中创建了一个模板,它具有祝客户生日快乐的功能。我想以这样的方式设置这个消息,每年都会发送给客户,以便他过生日。我认为最好的方法是创建一个cron作业。但是,我不熟悉cron的工作,我希望得到你的帮助。
我创建了一个属性birthday_date
,它会将生日日期设为day month
。这是我到目前为止所做的:
#!/bin/bash
MANAGE="../venv/bin/python ../manage.py"
任何人都可以告诉我怎么能这样做?
提前致谢!
答案 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')