首页 > 解决方案 > 如何在 post_save 中发送电子邮件而不要求用户等待表单提交?

问题描述

这是我的 post_save 方法:

from asgiref.sync import sync_to_async

@receiver(post_save, sender=SubmissionDetails)
def create_submission_email(sender, instance, created, **kwargs):
    if created:
        data = sync_to_async(call_submssion_email(instance))

def call_manuscript_submssion_email(instance):
    print("Hi")
    message = '''Submitted with the title, <br>
    {0}'''.format(instance.title)
    subject = 'Article Submitted'
    to_address = 'example@gmail.com'
    from_address = "from@mail.example.com"
    msg = EmailMessage(
                    subject, message,from_address,[to_address]
                    )
    msg.content_subtype = "html"
    msg.send()

问题是在提交表单时,用户必须等到发送电子邮件才能看到结果。我正在使用带有一些异步支持的 django 3.0。

标签: pythondjango

解决方案


异步支持

Django 3.0 中的新功能

Django 正在开发对异步(“async”)Python 的支持,但还不支持异步视图或中间件;他们将在未来的版本中出现。

对异步生态系统其他部分的支持有限;即,Django 可以原生支持 ASGI,以及一些异步安全支持。

Django 异步支持官方


您可以将 Django ChannelsCelery用于您的异步代码。

您还可以查看Django 频道与 celery 有何不同?


推荐阅读