django プロジェクトのデータが更新または変更されたときに、毎週の自動電子メール通知をユーザーに送信する方法は何ですか?
2 に答える
私が知っている最も簡単な解決策を説明します。この問題には、はるかに洗練されたアプローチもあります。
基本的に、次の 3 つのものが必要です。
- タスク ランナー ( django-kronosで cron ジョブを構成することをお勧めします)
- SMTP プロバイダー ( Django でのセットアップが非常に簡単で、すぐに使用できるテスト クレジットを提供するMailgunをお勧めします)。
- メール テンプレート (自分で書いて、Django で文字列にレンダリング -- Mailgun のブログには、いくつかの優れたオープン ソース テンプレートもあります)
例: django-kronosは、関数を cron ジョブとして登録するためのデコレーターを提供します (これは、Web サーバーが Linux ベースであることを前提としています)。これらのジョブは、コマンド ラインからデプロイ プロセスの一部としてインストールできます。
./manage.py installtasks
kronos がタスクを見つけるには、それらがcron.py
アプリ内のファイルに配置されている必要があります。
# myapp/cron.py
import kronos
from django.contrib.auth.models import user
from myapp.services import check_for_changes, notify_user_of_change
# Register cron job to run once a week (every Sunday) at midnight
@kronos.register('0 0 * * 0')
def notify_about_changes():
"""Sets up a cron job and runs this service function once a day.
Installed With:
``./manage.py installtasks``
"""
all_my_users = User.objects.all()
for user in all_my_users:
changes = check_for_changes(user)
for change in changes:
notify_user_of_change(user, change)
タスク関数をできるだけ「薄く」保つことをお勧めします。あなたの場合、(a) 変更をチェックしてから、(b) 各変更について通知します。これらはそれぞれ、ユーザー インスタンスをパラメーターとして受け入れる関数であるか、モデル メソッドである可能性があります。いずれにせよ、大変な作業は他の場所で処理する必要があります。
これは非常に幅広い質問であるため、残念ながら答えも幅広いものになります。あなたが探している一般的なワークフローは、おそらく、データの更新時にアクティブ化されるように設定できるシグナルから始まります。
次に、そのシグナルは変更に関するデータを保存し、さまざまな電子メール オプションのいずれかを使用して電子メールを送信します。組み込みのDjango emailを使用するか、 django-mailchimpなどのサードパーティ API を使用できます。
うまくいけば、これがあなたを正しい方向に向かわせます。