[英]django signal send email after registering user
我已經閱讀了信號文檔,但並不太了解。
當我注冊用戶時,應發出信號並向用戶發送確認郵件。
我不明白這個過程。 有人可以給我一個很好的例子,我如何做到這一點。 注冊用戶后,將觸發通知,並且必須向用戶發送電子郵件。
我正是這樣做的:
def user_created(sender, instance, created, *args, **kwargs):
user = instance
if created:
email_confirmed, email_is_created = EmailConfirmed.objects.get_or_create(user=user)
if email_is_created:
short_hash = hashlib.sha1(str(random.random())).hexdigest()[:5]
base, domain = str(user.email).split("@")
activation_key = hashlib.sha1(short_hash+base).hexdigest()
email_confirmed.activation_key = activation_key
email_confirmed.save()
email_confirmed.activate_user_email()
#user_logged_in.connect(get_create_stripe)
post_save.connect(user_created, sender=settings.AUTH_USER_MODEL)
讓我告訴您上面發生的事情:我們有一個user_created()函數,該函數檢查是否存在具有相同電子郵件ID的用戶。 如果沒有,我們會發送一封激活電子郵件。 怎么樣? 我們有信號post_save( from django.db.models.signals import post_save
),該信號在save()末尾發送信號。 關於post_save的更多信息可以在這里閱讀。
您可以觀看我的存儲庫 ,以更好地了解整個過程。
這是一個非常廣泛的問題,所以我只概述一些可能性,而您必須選擇如何處理它。
最簡單,最明顯的選擇是完全避免信號。 信號很棒,在您需要解耦應用程序時非常重要。 因此,例如,如果將來有其他應用程序需要在用戶注冊時執行某些操作,那么信號是一個很好的起點。
在這種情況下,可以在User模型上使用信號post_save
,因此在保存用戶之后,請執行邏輯操作。
from django.db.models.signals import pre_save
from django.dispatch import receiver
from django.contrib.auth.models import User
@receiver(post_save, sender=User)
def my_handler(sender, **kwargs):
...
另外,您甚至可以定義您的自定義信號並在注冊用戶時觸發它。
Django docs中有一個很棒的文檔:帶有特定示例的信號 ,這些示例過於廣泛而無法在此處呈現。
但是,如果您不需要解耦應用程序,而只想在保存用戶后發送電子郵件,則可以在處理用戶注冊的視圖中進行發送。 這樣,您將避免使用信號編碼的額外開銷。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.