我是朱尼尔·詹戈·德夫。我有第一个项目。做得很好,但是教我的高级开发人员去度假了。。。。
我公司有一项任务,就是创建一个功能,在事件发生前5天通过发送邮件提醒特定组中的所有人。
有一个TournamentModel包含一个tournament_start_date例如'10.08.2018'
玩家可以加入锦标赛,当他加入django组“注册”。
我必须创建一个function(作业?)这将检查tournament_start_date如果比赛在5天内开始,这个功能将发送电子邮件给“注册”组中的所有人。。。自动。
我该怎么做?我该用什么?如何运行它,它会自动检查?我学了几个月的python/django。。。但我第一次见到乔布斯/
我会感谢你的帮助。

最佳答案

如果你把它分成两部分,就容易多了。零件是
发送提醒邮件
每天运行脚本
在第一部分中,我将首先安装杰出的django-extensions包,以便易于运行脚本。(检查您安装的_应用程序,您可能已经安装了它。)拥有python-dateutil软件包也会有帮助。
然后我会写我的剧本。假设你的应用程序名为“myapp”。在“myapp”下创建一个名为“scripts”的目录,并在其中创建一个空的初始化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

(PROTIP:确保您的测试数据库只包含您自己的电子邮件地址。如果你的测试系统向每个人发送电子邮件,那就太尴尬了。)
(PROTIP:您还可以将Django配置为将电子邮件放入日志,而不是实际发送它们。)
在第二部分中,您必须找到一种方法来安排每天运行作业。通常,你的操作系统会提供一种方法。如果您在Unix/Linux上,您将使用“cron”。如果你在Windows上,你将使用“计划任务”。(还有其他计划选项,但这些是最常见的。)

10-07 19:32
查看更多