【问题标题】:django-notification. How can I use threading email send?django 通知。如何使用线程电子邮件发送?
【发布时间】:2012-11-26 08:26:55
【问题描述】:

在我的 django 应用程序中,我使用 django-notification 发送通知。但是我注意到在某些情况下(发送多个通知时)我的 Web 应用程序会延迟响应。虽然我通过 Ajax 请求发送通知,但我仍然认为最好实现提供线程电子邮件的mailtools 库。

有没有人实现过这样的事情?这简单吗?如何在django-notification 中使用mailtools 中的ThreadedMailer

或者,还有其他选择吗?

【问题讨论】:

    标签: django django-notification


    【解决方案1】:

    为此目的使用Celery。使用 django 很容易设置,您可以使用您现在正在使用的代码。

    ajax 请求将电子邮件放入任务队列并返回。如果您想稍后检查任务是否成功,您可以返回您的任务 ID。

    更新:

    Celery 只允许你在后台调用你的函数。在你调用的 ajax 视图中说:

    send_email(…)
    

    现在在tasks.py 你应该定义函数:

    @task
    def send_email(…)
    

    在视图中,您将通过以下方式调用它:

    send_email.delay(…)
    

    就是这样。该电子邮件将由后台工作程序守护进程使用您现有的 python 代码发送。

    这不会使django-notification 过时。 Celery 做了完全不同的事情,可以与你能想象到的任何库一起使用。

    唯一的变化是任务参数必须是可选的。这意味着您必须传递数据库 ID,而不是整个对象等。

    【讨论】:

    • 很好,谢谢。芹菜会使django-notification 过时吗?是否所有电子邮件操作都会自动在 Celery 中排队? (或者他们需要在 ajax 请求中?)
    • 太棒了!最后一件事。我想在def send_mail() 中添加notification.send(args) 就可以了?
    • 我相信你是对的。我从未使用过django-notification,但我每天都使用 Celery 来处理数百个任务。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-27
    • 1970-01-01
    • 1970-01-01
    • 2021-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多