我是初级 Django 开发人员。得到了我的第一个项目。做得很好,但教我的高级开发人员去度假了....
我公司的任务是创建一个功能,在事件开始前 5 天通过发送邮件提醒特定组中的所有人。
有一个 TournamentModel
,它包含一个 tournament_start_date
,例如 '10.08.2018'
。
玩家可以参加锦标赛,当他加入 django 组“Registered”时。
我必须创建一个函数
(工作?)来检查tournament_start_date
,如果锦标赛在 5 天后开始,这个函数将向“Registered”中的所有人发送电子邮件"分组...自动。
我该怎么做?我应该使用什么?如何运行它,它会自动检查?我正在学习 python/django 几个月......但我第一次遇到工作;/
我将不胜感激。
最佳答案
如果将其分解为两部分,会更容易。零件是
- 发送提醒邮件
- 每天运行脚本
对于第一部分,我将从安装出色的 django-extensions 开始包以便于运行脚本。 (检查您的 INSTALLED_APPS,您可能已经安装了它。)有了 python-dateutil包也会有帮助。
然后我会写我的脚本。假设您的应用名为“myapp”。在“myapp”下创建一个名为“scripts”的目录,并在其中创建一个空的 __init__.py。
现在在“myapp/scripts/remind_players.py”中创建脚本文件。它看起来像这样:
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
(提示:确保您的测试数据库只包含您自己的电子邮件地址。让您的测试系统向所有人发送电子邮件会很尴尬。)
(提示:您还可以配置 Django 将电子邮件消息放入日志中,而不是实际发送它们。)
对于第二部分,您必须找到一种方法来安排作业每天运行。通常,您的操作系统会提供一种方法来做到这一点。如果您使用的是 Unix/Linux,您将使用“cron”。如果您使用的是 Windows,您将使用“计划任务”。 (还有其他调度选项,但这些是最常见的。)
关于python - Django - 如何在事件前 5 天发送邮件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51379567/