如何向django管理站点添加新用户的用户发送电子邮件?

时间:2011-07-06 08:10:44

标签: django django-admin

每当管理员向管理网站添加新用户时,我都希望向用户发送一封包含登录详细信息的电子邮件。

我知道Django为此提供了send_mail模块,但我不知道我应该把这段代码放在哪里 并覆盖一些视图,以便在新用户添加时发送自动邮件。

from django.core.mail import send_mail

send_mail('Subject here', 'Here is the message.', 'from@example.com',
    ['to@example.com'], fail_silently=False)

我该怎么做?

我尝试将此代码放入models.py

from django.db.models.signals import post_save
from django.contrib.auth.models import User

    def email_new_user(sender, **kwargs):
        if kwargs["created"]:  # only for new users
            new_user = kwargs["instance"] 
            print new_user.email
            #send_mail('Subject here', 'Here is the message.', 'from@example.com',['to@example.com'], fail_silently=False)


post_save.connect(email_new_user, sender=User)

但它不能在命令行上打印任何东西。我认为每当我创建一个新用户时都不会调用该函数。不知道为什么?

3 个答案:

答案 0 :(得分:3)

我可以在代码中看到多个问题,我可以在上面看到它。

  • 首先,def email_new_user()被错误地缩进。如果这不是格式化错误,请更正它。
  • new_user = kwargs.["instance"]语法错误。它应该是kwargs["instance"]

然后,你有运行的SMTP服务器吗?你能从shell发送电子邮件吗?如果没有,请配置,然后再次尝试。它应该工作。

答案 1 :(得分:1)

您希望User型号为hook the post_save signal

答案 2 :(得分:0)

一个可能的问题是,Django用户创建包含两个步骤。首先django要求用户名密码密码确认,当您按保存(或保存并继续编辑)时,您的保存方法无需< strong>电子邮件信息。由于django将接受该请求作为新创建的记录,您的信号将触发一条没有电子邮件信息的记录......

如果django处理admin保存并且不将新创建的记录实例标记为 created ,则不会有任何问题,但django可能不会这样做。

更新:一些可能的原因是:

  • 你需要django 1.3,所以用 python manage.py版检查你的django版本并在需要时更新它......
  • 适用于models.py文件的最佳位置
  

您可以将信号处理和注册码放在任何您喜欢的地方。但是,您需要确保早期导入模块,以便在需要发送任何信号之前注册信号处理。这使得你的应用程序的models.py成为一个放置信号处理程序注册的好地方。

这些是基本问题......