【发布时间】:2019-09-03 11:57:19
【问题描述】:
爱好开发者,Python 和 Django 新手。
正在处理项目,其中包括通过管理后端使用 CustomUser(AbstractUser) 模型创建新用户。在 [保存] 我想自动发送电子邮件到新用户电子邮件 [To:] 并共享管理员创建新用户时提供的用户名和密码。
我在 MacOS 上使用 Python3.7 Django 2.2。在虚拟环境 [Conda] 中进行开发。开发环境中的电子邮件服务器设置为后端文件类型。我已经在论坛上进行了“广泛”搜索 [包括这个] ...尝试了我能找到的示例代码。我已经能够在表单保存时发送 [然后在后端文件中接收] 电子邮件,但不知道如何在电子邮件中包含表单变量。
VIEWS.py
from django.shortcuts import render
from django.core.mail import send_mail
def notification_mail_send(request):
form = CustomUserCreationForm(request.POST)
if form.is_valid():
# SET UP MAIL CONTENT AND SEND MAIL
pass
FORMS.py
from django import forms
from django.contrib.auth.forms import UserCreationForm, UserChangeForm
from .models import CustomUser
class CustomUserCreationForm(UserCreationForm):
class Meta(UserCreationForm):
model = CustomUser
fields = ('username', 'owner_fullname', 'email')
class CustomUserChangeForm(UserChangeForm):
class Meta(UserChangeForm):
model = CustomUser
fields = ('username', 'owner_fullname', 'email')
【问题讨论】:
-
Django 允许您将信号分配给模型对象。当模型上发生某些条件时,这些会被执行。本质上,您正在利用 django 中的事件,以使用它们来执行某些操作。 docs.djangoproject.com/en/2.2/topics/signals
-
@Rupin 谢谢。我现在在 CustomUser 的 models.py 中使用 @receiver(post_save,sender=CustomUser),因此当用户创建或用户更改指令保存到模型时,用户会发送和接收一封电子邮件 [同一个!]。但是,我在登录时知道用户也收到了相同的电子邮件 [!] 我假设用户登录时“某物”已保存到模型 [?] ...我猜不同的“创建”和“更改”指令接收者应该遵循自定义表单,也许是 form_valid()?目标是让不同的电子邮件发送用户更改和用户创建,用户登录时没有。
-
当登录发生时,用户模型被更新。有一个字段可以更新用户的上次登录时间。您可以查看该字段并将其与当前服务器时间进行比较,如果差异小于某个时间间隔,则不触发您的电子邮件。
-
@Rupin 知道了!只需在models.py的
post_save_receiver(sender, instance, created, **kwargs):函数中添加if created:即可解决。 -
请在此题中添加正确答案,并将其标记为已回答。
标签: python django-forms