我必须构建一个Django应用程序,向用户发送电子邮件通知。但是用户希望设置发送电子邮件的时间段。我读到celeni有一个周期性任务功能,但时间必须事先设置,所以我如何用用户给定的时间和celeni来制作周期性任务?
class UserMail(models.Model):
user_mail = models.EmailField()
auto_send_mail = models.BooleanField(default=False)
time_set = models.TimeField(blank=True,null=True)
设置时间以获取用户在表单中发布时给出的时间。
我认为这篇文章可以帮助您解决所需问题。
另一种选择是设计一个每1分钟运行一次的周期性任务,该任务将查询UserMail
,以检查某些记录是否在一分钟内有time_set
,并发送电子邮件。还要注意的是,芹菜中的周期性任务调度程序并不是为处理数千个调度任务而设计的。
使用线程。您可以在获取更多详细信息https://docs.python.org/3/library/threading.html
因此,基本上,您希望使用用户输入的时间创建Task。O拥有的是一个API,我以POST请求的形式接受用户的输入。
在这里,我处理了用户在一个名为response的变量中发送的数据。然后,我们创建了一个时间表,用户给出的时间以分钟为单位。最后,我们完成了所需的周期性任务。在您的情况下,如果您的应用程序resources中的tasks.py文件中有一个名为send_mail的函数,则代码将如下所示。
response = request.data.copy()
schedule, created = IntervalSchedule.objects.get_or_create(
every=response['interval'],
period=IntervalSchedule.MINUTES,
)
task = PeriodicTask.objects.create(
interval=schedule,
name=f'{send mail task for user {self.request.user.id}| '
task='urlmonitor.tasks.send_mail',
args=json.dumps([self.request.user.email]),
# expires=datetime.utcnow() + timedelta(seconds=30)
)