簡體   English   中英

django信號注冊用戶后發送電子郵件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM