ジャンゴシグナル


こんにちはここで私はdjango信号について他のポストと午前
まず第一に、我々はdjango信号を必要とします.我々がバックエンドでイベントベースの機能性を開発しようとするとき、ジャンゴ信号は役に立つことができます
DJangoでは、我々は2つの実体が1つの送付者である、そして、他のものが送付者がどんな特定のイベントの上にも信号を送るでしょう、そして、その出来事を聞いているすべてのレシーバーはシグナルで通知されて、特定の種類の行動を実行します

Djanoモデルに基づく信号


djangoのinbuildシグナルを使用することによって、いくつかの例を見ることができます
Djangoのモデルで少数のモデルを定義しましょう.パイ
# models.py

from django.db import models
from django.contrib.auth.models import User
import datetime

# Create your models here.
class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    profile_url = models.URLField()
    mobile = models.CharField(max_length=20, default='999-999-9999')
    funds = models.FloatField(default=2000)

    def __str__(self):
        return "[PROFILE]:" + self.user.username


class Log(models.Model):
    timestamp = models.DateTimeField(default=datetime.datetime.now)
    message = models.TextField()

    def __str__(self):
        return self.message
ここでは、モデルによって作り付けられたユーザーモデルを拡張する2つのモデルプロフィールを定義しました.onetoonefieldともう一つは、単にログメッセージをデータベースに格納するのに用いられるlogモデルです
今、特定のモデルがデータベースに保存された後にトリガされているPostSave Save
# models.py

# .... models defined above

from django.db.models.signals import post_save
from django.dispatch import receiver


# triggred when User object is created
@receiver(post_save, sender=User)
def create_profile(sender, instance, created, **kwargs):
    if created:
        Profile.objects.create(
            user=instance
        )

# triggred when User object is saved
@receiver(post_save, sender=User)
def log_user_saved(sender, instance, **kwargs):
    Log.objects.create(
        message=f"user {instance.username} is saved"
    )

# triggred when Profile object is saved
@receiver(post_save, sender=Profile)
def log_profile_saved(sender, instance, **kwargs):
    Log.objects.create(
        message=f"profile {instance} is saved"
    )
上記のように我々は3つの受信機機能を作成しているそれらのそれぞれを見ることができます
ユーザモデルがデータベースに保存された後に、ユーザーモデルによってPostSound Save信号が生成され、CreateRangeプロファイルレシーバーがトリガされた後に、ユーザーモデルにおけるpostMount Save信号が生成されると、このレシーバはトリガされます
CreateSumプロファイルでは、ユーザーのプロファイルを作成しています.これにより、django adminに行ってユーザーを作成することができます
ユーザーの作成

ユーザセーブ

プロファイル作成

上記のイメージで見ることができるように、プロファイルは、自動的に作成されます
同様に我々はログモデルに行く場合は、各信号のログを見ることができます

上記のイメージでは、ログオブジェクトは、ユーザーとプロファイルのシグナルがトリガーされたときに作成されることがわかります
PostSumの保存に似ています.私たちには、Phorse Save、Predent Delete、PostSpace Delete、Prezy Initのようなシグナルがあります.
後のinit

受信機は様々な信号のために機能する


プリセン
receiver_function(sender, *args, **kwargs)
後号
receiver_function(sender, instance)
プリセーブ
receiver_function(sender, instance, raw, using, update_fields)
後セーブ
receiver_function(sender, instance, created, raw, using, update_fields)
predent delete
receiver_function(sender, instance, using)
後行削除
receiver_function(sender, instance, using)
M 2 Mange変更
receiver_function(sender, instance, action, reverse, model, pk_set, using)