Djangoのモデル、信号や電子メールの送信遅延
-
23-09-2019 - |
質問
私は、モデルが保存されると(メール送信のためのmodels.signals.post_save.connect
信号とsend_mail
を経由して)いくつかの電子メールアドレスに電子メールを送り、私のモデルに信号を追加しました。このアイデアは、まだ彼らはサイトでモデルを保存するとき、彼らは、サーバーからの応答を受信したときに、これらすべての電子メールが送信され、ザッツされるまで待たなければならない、ユーザーのための遅延を行います。
信号を試みる前に、私は私のモデルの保存方法をラップしようとしていた、とsuper(Foo, self).save(*args, **kwargs)
後、私は電子メールを送信していました。この遅延の経験があまりにもその方法で起こっていた。
私は単に私の電子メールは、サイトのユーザーに遅延を表示せずに、バックグラウンドで実行されるアクションを送信します。
これは解決することができますか?
解決
最も簡単な方法は、電子メールメッセージをキューイングすることであり、そしてそれらは、デーモンによって送られてきました。 ジャンゴ・メーラーをチェックします。
あなただけsend_mailに関係しているように見えるので、は、次の2つの手順を始めることができます。まず、send_mailの輸入ジャンゴ・メーラーのバージョンにこれを使用します:
# favour django-mailer but fall back to django.core.mail
from django.conf import settings
if "mailer" in settings.INSTALLED_APPS:
from mailer import send_mail
else:
from django.core.mail import send_mail
その後、そしてメールを送信するmanage.py send_mail
を呼び出し、cronジョブを作成します。 ジャンゴ・メーラーの使用状況のドキュメントは、例えば、cronジョブのためをチェックエントリーます。
、コンソール上でmanage.py send_mail
を実行してみてください。これは、人々が持っているナンバーワンの問題のようです。
他のヒント
応答に遅延を避けるために、あなたは別のプロセスで非同期にこれをしたい。
この質問は、ということをどのように扱うかについてです:Pythonの/ Djangoの上アドバイスとメッセージキューの