Djangoでは、特定のイベントが発生したときに、何らかの処理ができるような仕組み(Signals))がある。
たとえば、モデルを保存したり、削除したときになにか処理させるとか。
サンプル
こちらの記事の登録完了メールの例を引用。(すごくわかりやすい。。)
ユーザが作成されるとメールが送る例。
まずは、受け取る関数を作成。ファイル名はsignals.py。
from django.db.models.signals import post_save from django.dispatch import receiver from django.core.mail import send_mail from .models import User # 受け取る関数に、@receiverをつける # シグナルの種類(post_save)と、送ってくるクラス(sender)を設定 @receiver(post_save, sender=User) def send_registered_mail_handler(sender, instance, created, **kwargs): if created and instance.email: send_mail('[タイトル] 登録完了', 'しました(本文)', 'no-reply@crohaco.net', [instance.email])
作成したsignals.pyを読み込むようにAppConfigの設定を変更
from django.apps import AppConfig class MyappConfig(AppConfig): name = 'myapp' def ready(self): from . import signals
INSTALL_APPSには、AppConfigを読み込む形で設定。
INSTALL_APPS = ( # : # : someapp 'myapp.apps.MyappConfig', )
若干ハマったのが、以下の2点
- app.py内で初期化後にimportする必要があるので,AppConfigを設定する必要がある
- post_save
のupdate_fields
は、DRFだと空が返ってくる。。
- update_fields
は、Model.save(update_fields="")に指定されたフィールドが返ってくるため。
以上!!