gpt4 book ai didi

django - 在 Django 中更改电子邮件时发送确认电子邮件

转载 作者:行者123 更新时间:2023-12-04 00:46:08 26 4
gpt4 key购买 nike

我目前正在使用 django-registration,它运行良好(有一些技巧)。当用户注册时,他必须检查他/她的邮件并点击激活链接。很好,但是...

如果用户更改电子邮件怎么办?我想给他/她发一封电子邮件,以确认他是电子邮件地址的所有者...

是否有应用程序、片段或其他东西可以节省我自己编写的时间

最佳答案

我最近遇到了同样的问题。而且我不喜欢为此使用另一个应用程序/插件的想法。

您可以通过收听User 模型的单曲(pre_savepost_save)并使用RegistrationProfile 来实现这一点:

信号.py:

from django.contrib.sites.models import Site, RequestSite
from django.contrib.auth.models import User
from django.db.models.signals import post_save, pre_save
from django.dispatch import receiver
from registration.models import RegistrationProfile


# Check if email change
@receiver(pre_save,sender=User)
def pre_check_email(sender, instance, **kw):
if instance.id:
_old_email = instance._old_email = sender.objects.get(id=instance.id).email
if _old_email != instance.email:
instance.is_active = False

@receiver(post_save,sender=User)
def post_check_email(sender, instance, created, **kw):
if not created:
_old_email = getattr(instance, '_old_email', None)
if instance.email != _old_email:
# remove registration profile
try:
old_profile = RegistrationProfile.objects.get(user=instance)
old_profile.delete()
except:
pass

# create registration profile
new_profile = RegistrationProfile.objects.create_profile(instance)

# send activation email
if Site._meta.installed:
site = Site.objects.get_current()
else:
site = RequestSite(request)
new_profile.send_activation_email(site)

因此,每当更改用户的电子邮件时,该用户将被停用,并会向该用户发送一封激活电子邮件。

关于django - 在 Django 中更改电子邮件时发送确认电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9779683/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com