【问题标题】:Django send signal sometime in the futureDjango 在未来的某个时间发送信号
【发布时间】:2013-03-27 03:08:11
【问题描述】:

我有一个采用expires_at 时间字段的模型。从某种意义上说,用户可以设置条目无效的时间。那时,我需要做一些具体的操作,比如发送电子邮件和/或更改模型中的参数。

具体来说,假设我有一个模型:

class SomeModel(models.Model):
    ... #Code here ...
    expires_at = models.DateTimeField()

现在,保存模型时,expires_at 字段中将设置一个时间,该时间是未来的某个时间。这个时候,我需要发邮件。

我看过 django 的信号功能,但不是很成功。我不想求助于运行不断轮询数据库或其他东西的 cronjobs。有人能指出我正确的方向吗?

【问题讨论】:

  • cronjobs 确实会反复轮询数据库,但这不会对性能造成巨大影响,因为您将查询自上次执行 cron 作业以来发生的变化。

标签: django django-models scheduled-tasks crontab django-signals


【解决方案1】:

【讨论】:

    【解决方案2】:
    class SomeModel(models.Model):
        ... #Code here ...
        expires_at = models.DateTimeField()
    
    
    def your_signal(sender, instance, created, **kwargs):
        if created:
            instance.expires_at =       <---set time here
            instance.save()
    
            #do other stuff
    
    post_save.connect(your_signal, sender=SomeModel)
    

    【讨论】:

    • 嘿。这很好,如果我只想在创建实例时设置到期日期。我的问题是在到期时发送电子邮件
    • 这很简单,只需在信号上添加发送电子邮件功能,您不能在我的答案中得到我想要描绘的内容吗?
    猜你喜欢
    • 2014-04-01
    • 1970-01-01
    • 2011-06-11
    • 1970-01-01
    • 2015-12-10
    • 1970-01-01
    • 2018-03-13
    • 1970-01-01
    • 2018-05-14
    相关资源
    最近更新 更多