有没有更快更有效的方法在 django 中发送电子邮件,这样用户就不必等待页面加载的整个时间

Is there a more faster and efficient ways to send email in django so that the user does not have to wait the entire time the page loads

我正在制作一个网站,用户可以在该网站上注册以根据他选择的计划在特定时间段内预订讲师。用户可以选择三种计划,即 7 天、14 天和 21 天。注册后,用户需要接受协议,然后根据他选择的计划,从用户接受协议之日起设置到期日期。

现在,在用户接受协议后,协议的副本将通过电子邮件发送给用户和网站所有者。 所有者想要这个系统,用户和他们都收到协议副本。我能够做到这一点,并且该站点在测试阶段运行良好。所以基本上,在用户接受后会发送两封电子邮件并更新 Contract 模型。

现在,我注意到发送两封电子邮件会花费大量时间,并且页面会一直加载,直到两封电子邮件都已发送,然后重定向和所有这些都会发生在用户身上。这段等待时间可能会触发一些用户按下回键中断 smtp 连接,然后再次尝试接受协议会引发完整性错误,并且还会提供较差的用户体验。下面的代码是如何实现这一点的。

views.py(只发计划7天的部分)


    if request.method == 'POST':
           agreement = Contract()
           
           if request.user.plan == '7days':
                agreement.user = request.user
                agreement.contract_status = True
                expiry = datetime.now() + timedelta(days=7)
                agreement.date_of_acceptance = datetime.now()
                agreement.date_of_expiration = expiry
                agreement.save()
           
                # for the customers
                template = render_to_string('contract_email.html', {'name': request.user.full_name, 'email': request.user.email, 'plan': request.user.plan,'price': 2000, 'accept': agreement.date_of_acceptance, 'expire':agreement.date_of_expiration})
                email = EmailMessage(
                    'Copy of Contract',                                   #subject
                    template,                                                      # body
                    settings.EMAIL_HOST_USER,
                    [request.user.email],                                       # sender email
                )
                email.fail_silently = False
                email.content_subtype = 'html'       # WITHOUT THIS THE HTML WILL GET RENDERED AS PLAIN TEXT
                email.send()

                #for the owners

                template = render_to_string('contract_email.html', {'name': request.user.full_name, 'email': request.user.email, 'plan': request.user.plan,'price': 2000, 'accept': agreement.date_of_acceptance, 'expire':agreement.date_of_expiration})
                email = EmailMessage(
                    'Copy of Customer Contract',                                   #subject
                    template,                                                      # body
                    settings.EMAIL_HOST_USER,
                    ['owner@gmail.com'],                                       # sender email
                )
                email.fail_silently = False
                email.content_subtype = 'html'       # WITHOUT THIS THE HTML WILL GET RENDERED AS PLAIN TEXT
                email.send()

                return redirect('user')

上面生成的值都存储在模型中,然后通过必要的电子邮件发送。

因为,我是个初学者,我想知道是否有更高效、更快捷的方法来完成整个任务,这样用户就不必等待那么久的重定向和电子邮件发送来自后端。

您可以使用同步代码做的事情不多,您需要做的是设置一个异步视图Async with Django并为您的电子邮件创建工作程序。

我们的想法是让所有可能减慢服务器速度的任务都包含在异步任务中,这在很多情况下都有用,特别是在需要发送合同和电子邮件但不应该阻止的情况下执行的连接或代码。