django - 有什么方法可以在 Django 中安排类似于 MySQL 事件的事件?
问题描述
我有一个数据库事件与我的 Django 应用程序(托管在 apache2 上)一起更新我的一个表中的日期字段。
此日期字段会影响表中的另一列,该列Inspection_Due?
根据行中的日期返回是或否。我想做的不仅仅是更新这里的表,这就是我想要远离 SQL 事件的原因。我希望能够在更改时发送电子邮件、文本、通知等。
所以我想知道是否有任何现有的方法可以在 Django 中创建背景事件,而无需我打开任何视图来实现这一点,只要数据库中的 Date 列发生更改。
解决方案
是的,你可以使用 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)
推荐阅读
- azure-cosmosdb - 在 Cosmos DB 中使用关键字作为别名
- c++ - 如何告诉 live555 rtspclient 发送带有特定连接的 setupCommand?
- log4j - log4j.properties 输出文件名配置应该是:path+DD-MM-AAAA - Filename.log
- javascript - 如何根据另一个日期选择器选择的日期禁用日期选择器过去的日期
- android - 如何在 json fromat 中获取这些数据?
- vb.net - 以管理员权限打开 OLEDb 连接
- database - RocksDB JNI 慢读性能
- wordpress - WooCommerce 企业定制定价
- c++11 - 在这段代码c ++中声明函数平均值时我在哪里遇到了问题
- mysql - mysql完全连接中的重复项