Как отправить письмо со сбросом пароля с другого вида?

#django #django-models #django-views #django-forms #django-templates

Вопрос:

У меня есть идея создать ресторан. В том же представлении также создается пользователь. После создания пользователя я должен отправить пользователю электронное письмо со ссылкой для сброса пароля.

Мой взгляд выглядит так:

 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'
     )]
 

Как я могу отправить электронное письмо, как указано выше?

Комментарии:

1. Привет @AryanVR мой ответ решил вашу проблему, если да, то не стесняйтесь принять его

Ответ №1:

Вы можете добавить функцию для обработки отправки электронной почты, как это

 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