django - 如何从另一个视图发送密码重置邮件?
问题描述
我有一个创建餐厅的想法。在同一视图中,还创建了一个用户。创建用户后,我必须向用户发送一封邮件,其中包含重置密码的链接。
我的观点如下:
def create_restaurant(request):
form = RestaurantForm()
user_form = RestaurantUserForm()
if request.method == 'POST':
form = RestaurantForm(request.POST, request.FILES)
user_form = RestaurantUserForm(request.POST)
if form.is_valid() and user_form.is_valid():
#----user is saved here------
user_obj = user_form.save()
#----have to sent the mail here------
#-----restaurant is saved here-----
restaurant_obj = form.save()
restaurant_obj.user = User.objects.get(id=user_obj.id)
restaurant_obj.save()
messages.success(request, 'Restaurant Added Successfully.')
return redirect('create_restaurant')
context = {
"title": "Add restaurant",
"form": form,
"user_form": user_form
}
return render(request, "restaurant/restaurant.html", context)
我已经使用
urlpatterns = [
path('reset_password/',
auth_views.PasswordResetView.as_view(template_name="password_reset.html"),
name='password_reset'
),
path('reset_password_sent/',
auth_views.PasswordResetDoneView.as_view(template_name="password_reset_sent.html"),
name='password_reset_done'
),
path('reset/<uidb64>/<token>/',
auth_views.PasswordResetConfirmView.as_view(template_name="password_reset_form.html"),
name='password_reset_confirm'
),
path('reset_password_complete/',
auth_views.PasswordResetCompleteView.as_view(template_name="password_reset_done.html"),
name='password_reset_complete'
)]
如上所述,我怎样才能发送电子邮件?
解决方案
您可以添加一个函数来处理这样的电子邮件发送
if request.method == 'POST':
form = RestaurantForm(request.POST, request.FILES)
user_form = RestaurantUserForm(request.POST)
if form.is_valid() and user_form.is_valid():
#----user is saved here------
user_obj = user_form.save()
#----have to sent the mail here------
ctx = {add all your data which you want to add in your email template}
send_user_email(ctx)
#-----restaurant is saved here-----
restaurant_obj = form.save()
restaurant_obj.user = User.objects.get(id=user_obj.id)
restaurant_obj.save()
messages.success(request, 'Restaurant Added Successfully.')
return redirect('create_restaurant')
这是您负责发送电子邮件的功能
def send_user_email(ctx):
mail_subject = ctx['subject']
message = get_template('email_temp/user_notification.html').render(ctx)
to_email = ctx['user']
email = EmailMessage(
mail_subject,
message,
DEFAULT_FROM_EMAIL,
to=[to_email]
)
email.content_subtype = "html"
email.send(fail_silently=False)
return JsonResponse({'success':'success'})
你需要导入一些必需的东西
from django.template.loader import get_template
from django.core.mail import EmailMessage
推荐阅读
- makefile - makefile latex DVI=$(TEX:.tex=.dvi) 含义
- asp.net-core - 在 ASP.NET Core 2.2 中,如何在启动服务中获取基本 URL
- python - 子进程中的 Python 日志记录
- javascript - litelement - 在开槽元素中设置嵌套元素的样式
- python - Python/Django 使用 Through 保存 m2m
- php - 如何使用 PHP 7 中的 mpdf 库在同一个文件中调用 WriteHtml() 函数两次来编写内容?
- keycloak - Keycloak:为用户账户信息添加通用属性
- symfony-1.4 - 是否可以使用 Symfony 1.4 中的 schema.yml 更新数据库结构?
- android - 物理和虚拟设备上的应用显示错误
- java - 具有后备存储的功能数据结构