Python Django-如何在活动前5天发送邮件?
我是Junior Django Dev.拿到了我的第一个项目。做得很好,但教我的高级开发人员去度假了 我在公司有一项任务,就是创建一个功能,在活动开始前5天通过发送邮件提醒specyfic组中的所有人 有一个Python Django-如何在活动前5天发送邮件?,python,django,task,jobs,Python,Django,Task,Jobs,我是Junior Django Dev.拿到了我的第一个项目。做得很好,但教我的高级开发人员去度假了 我在公司有一项任务,就是创建一个功能,在活动开始前5天通过发送邮件提醒specyfic组中的所有人 有一个TournamentModel包含一个锦标赛开始日期,例如'10.08.2018' 玩家可以参加比赛,当他参加比赛时,他将加入django集团“注册” 我必须创建一个函数(作业?),该函数将检查比赛开始日期,如果比赛在5天后开始,该函数将向“已注册”组中的所有人发送电子邮件。。。自动地 我该
TournamentModel
包含一个锦标赛开始日期
,例如'10.08.2018'
玩家可以参加比赛,当他参加比赛时,他将加入django集团“注册”
我必须创建一个函数
(作业?),该函数将检查比赛开始日期
,如果比赛在5天后开始,该函数将向“已注册”组中的所有人发送电子邮件。。。自动地
我该怎么做?我应该用什么?如何运行它,它将自动检查?我正在学习python/django几个月。。。但我第一次见到乔布斯/
我将非常感谢您的帮助。您可以将此邮件发送功能设置为cron作业。如果您的团队使用过它,您可以通过crontab或芹菜来安排它。如果您将其分为两部分,这将更容易。零件是
from datetime import date
from datutil.relativedelta import relativedelta
from django.mail import send_mail # I think this is right.
from myapp.models import Tournament
def run():
# find our tournaments that start five days from now.
for tournament in Tournament.objects.filter(tournament_start_date=date.today() + relativedelta(days=5)):
# find the players that are registered for the tournament
for player in tournament.registered_player_set():
send_mail(...)
要手动运行脚本,请运行
python manage.py runscript remind_players
(PROTIP:确保您的测试数据库只包含您自己的电子邮件地址。让您的测试系统向所有人发送电子邮件会让您感到尴尬。)
(PROTIP:您还可以将Django配置为将电子邮件放入日志中,而不是实际发送。)
对于第二部分,您必须找到一种方法来安排作业每天运行。通常,您的操作系统会提供一种方法来实现这一点。如果您使用的是Unix/Linux,那么将使用“cron”。如果您在Windows上,您将使用“计划任务”。(日程安排还有其他选择,但这些是最常见的。)首先,你可能想了解一下自己。抱歉,这太广泛了。尽管如此,还是有几点提示:1/你可以在5天内开始比赛,在开始日期使用普通的ORM查找;2/将代码作为管理命令编写;3/使用系统调度程序(类似unix系统上的cron)每天运行一次。在一个cronjob上添加邮件,并安排每天检查一次,当一个事件在触发您的电子邮件的条件下有效时(距事件开始只有5天),请在LinuxWow中查找Windows上的计划任务或Cron作业!非常感谢您抽出时间。你可能救了我的命!;)