Python Django-如何在活动前5天发送邮件?

Python Django-如何在活动前5天发送邮件?,python,django,task,jobs,Python,Django,Task,Jobs,我是Junior Django Dev.拿到了我的第一个项目。做得很好,但教我的高级开发人员去度假了 我在公司有一项任务,就是创建一个功能,在活动开始前5天通过发送邮件提醒specyfic组中的所有人 有一个TournamentModel包含一个锦标赛开始日期,例如'10.08.2018' 玩家可以参加比赛,当他参加比赛时,他将加入django集团“注册” 我必须创建一个函数(作业?),该函数将检查比赛开始日期,如果比赛在5天后开始,该函数将向“已注册”组中的所有人发送电子邮件。。。自动地 我该

我是Junior Django Dev.拿到了我的第一个项目。做得很好,但教我的高级开发人员去度假了

我在公司有一项任务,就是创建一个功能,在活动开始前5天通过发送邮件提醒specyfic组中的所有人

有一个
TournamentModel
包含一个
锦标赛开始日期
,例如
'10.08.2018'

玩家可以参加比赛,当他参加比赛时,他将加入django集团“注册”

我必须创建一个
函数
(作业?),该函数将检查
比赛开始日期
,如果比赛在5天后开始,该函数将向“已注册”组中的所有人发送电子邮件。。。自动地

我该怎么做?我应该用什么?如何运行它,它将自动检查?我正在学习python/django几个月。。。但我第一次见到乔布斯/


我将非常感谢您的帮助。

您可以将此邮件发送功能设置为cron作业。如果您的团队使用过它,您可以通过crontab或芹菜来安排它。

如果您将其分为两部分,这将更容易。零件是

  • 发送提醒邮件
  • 每天运行脚本
  • 对于第一部分,我将首先安装杰出的软件包,以便轻松运行脚本。(检查你安装的应用程序,你可能已经有了。)拥有这个软件包也会很有帮助

    然后我会写我的剧本。假设您的应用程序名为“myapp”。在“myapp”下创建一个名为“scripts”的目录,并在其中创建一个空的_uinit__u;.py

    现在在“myapp/scripts/membrand_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上,您将使用“计划任务”。(日程安排还有其他选择,但这些是最常见的。)

    首先,你可能想了解一下自己。抱歉,这太广泛了。尽管如此,还是有几点提示:1/你可以在5天内开始比赛,在开始日期使用普通的ORM查找;2/将代码作为管理命令编写;3/使用系统调度程序(类似unix系统上的cron)每天运行一次。在一个cronjob上添加邮件,并安排每天检查一次,当一个事件在触发您的电子邮件的条件下有效时(距事件开始只有5天),请在LinuxWow中查找Windows上的计划任务或Cron作业!非常感谢您抽出时间。你可能救了我的命!;)