首页 > 解决方案 > 有什么方法可以在 Django 中安排类似于 MySQL 事件的事件?

问题描述

我有一个数据库事件与我的 Django 应用程序(托管在 apache2 上)一起更新我的一个表中的日期字段。

此日期字段会影响表中的另一列,该列Inspection_Due?根据行中的日期返回是或否。我想做的不仅仅是更新这里的表,这就是我想要远离 SQL 事件的原因。我希望能够在更改时发送电子邮件、文本、通知等。

所以我想知道是否有任何现有的方法可以在 Django 中创建背景事件,而无需我打开任何视图来实现这一点,只要数据库中的 Date 列发生更改。

标签: djangoevents

解决方案


是的,你可以使用 Django Celery。Celery 是一个基于分布式消息传递的异步任务队列/作业队列。它专注于实时操作,但也支持调度。

这是 django celery的第一步。您可以在模型中创建一个post_save方法,您将在其中运行一个异步任务,该任务将按照您的意愿发送邮件。

例如:

@app.task()
def your_celery_task_which_sends_mail(id):
    your_object = YourModel.objects.get(id=id)
    #do stuff, send mails, check if changed

class YourModel(models.Model)
    yourfields...


@receiver(post_save, sender=YourModel)
def save_profile(sender, instance, **kwargs):
    your_celery_task_which_sends_mail.delay(instance.id)

推荐阅读