为了账号安全,请及时绑定邮箱和手机立即绑定

为什么在 Django 信号中如果块为真而执行其他块?

为什么在 Django 信号中如果块为真而执行其他块?

ibeautiful 2022-01-18 16:02:52
我正在编写一个信号函数,该函数将在用户注册时向用户发送注册通知电子邮件,并在她/他更新用户个人资料时发送更新通知电子邮件。为此,我使用了 if-else 块来检查created参数。如果为真,用户将收到注册通知。否则,用户将收到配置文件更新通知。更新用户对象时它工作正常。但是当新用户注册时,if 和 else 块都在执行,并且新注册的用户会收到两封电子邮件通知:一封注册通知和一封个人资料更新通知。完整的信号代码如下:#myapp/signals.pyfrom django.core.mail import send_mailfrom django.db.models.signals import post_savefrom django.dispatch import receiverfrom django.template.loader import render_to_stringfrom django.utils.html import strip_tags#getting custom user modelUser = get_user_model()@receiver(post_save, sender=User)def send_user_notification(sender, instance, created, **kwargs):    if created:        subject = 'Signup Notification'        html_message = render_to_string(            'email/signup_notification.html',            {                'username': instance.username,                'email': instance.email,            }        )        message = strip_tags(html_message)        send_mail(subject, message, from_email='info@silatechnologies.com', recipient_list=[instance.email,],                  html_message=html_message)    else:        send_mail(subject='Your profile on Sila Crowdfunding updated!',                  message='Dear ' + instance.username + ', your profile information is updated successfully.',                  from_email='info@silatechnologies.com',                  recipient_list=[instance.email, ]                  )我也用过if not created代替else。但我得到了同样的结果。任何人都可以提供任何解决方案吗?提前致谢。
查看完整描述

1 回答

?
温温酱

TA贡献1752条经验 获得超4个赞

假设您使用的是 Django 的内置注册流程,这将意味着对User模型执行 2 个操作:

  1. 它将创建User对象,从而触发post_save信号,created=True您将发送第一封电子邮件。

  2. 注册后,Django 登录用户并更新其last_login字段,从而触发另一个post_save信号created=False


查看完整回答
反对 回复 2022-01-18
  • 1 回答
  • 0 关注
  • 148 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信