ジャンゴシグナル
こんにちはここで私はdjango信号について他のポストと午前
まず第一に、我々はdjango信号を必要とします.我々がバックエンドでイベントベースの機能性を開発しようとするとき、ジャンゴ信号は役に立つことができます
DJangoでは、我々は2つの実体が1つの送付者である、そして、他のものが送付者がどんな特定のイベントの上にも信号を送るでしょう、そして、その出来事を聞いているすべてのレシーバーはシグナルで通知されて、特定の種類の行動を実行します
djangoのinbuildシグナルを使用することによって、いくつかの例を見ることができます
Djangoのモデルで少数のモデルを定義しましょう.パイ
今、特定のモデルがデータベースに保存された後にトリガされているPostSave Save
ユーザモデルがデータベースに保存された後に、ユーザーモデルによってPostSound Save信号が生成され、CreateRangeプロファイルレシーバーがトリガされた後に、ユーザーモデルにおけるpostMount Save信号が生成されると、このレシーバはトリガされます
CreateSumプロファイルでは、ユーザーのプロファイルを作成しています.これにより、django adminに行ってユーザーを作成することができます
ユーザーの作成
ユーザセーブ
プロファイル作成
上記のイメージで見ることができるように、プロファイルは、自動的に作成されます
同様に我々はログモデルに行く場合は、各信号のログを見ることができます
上記のイメージでは、ログオブジェクトは、ユーザーとプロファイルのシグナルがトリガーされたときに作成されることがわかります
PostSumの保存に似ています.私たちには、Phorse Save、Predent Delete、PostSpace Delete、Prezy Initのようなシグナルがあります.
後のinit
プリセン
まず第一に、我々は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 deletereceiver_function(sender, instance, using)
後行削除receiver_function(sender, instance, using)
M 2 Mange変更receiver_function(sender, instance, action, reverse, model, pk_set, using)
Reference
この問題について(ジャンゴシグナル), 我々は、より多くの情報をここで見つけました https://dev.to/rohit20001221/django-signals-3ldnテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol