发送电子邮件之前,如何确定验证电子邮件条件?

时间:2020-02-03 13:48:16

标签: python django sendmail

如果不存在电子邮件,我该如何设置条件?不要将此电子邮件发送到我自己的电子邮件中 当我放入(存在)方法时,我在这里尝试尝试,但我认为这似乎行不通。
在这两种情况下,都会向我显示一封电子邮件成功消息
我该怎么阻止呢?
如果我的代码中有错误变成错误,我希望获得处理建议 抱歉,我的英语不太流利

views.py

from .forms import SignUp, ResetPassword, EditForm
from website import settings
from django.shortcuts import render, redirect
from django.contrib.auth.decorators import login_required
from django.contrib.auth.views import PasswordResetView, PasswordResetDoneView
from django.views.generic.edit import FormView
from django.urls import reverse_lazy
from django.core.mail import send_mail
from django.contrib.auth.models import User


class PasswordReset(PasswordResetView, FormView):
    template_name = 'account/password_reset_view.html'
    success_url = reverse_lazy('account:password_reset_done')
    email_template_name = 'account/reset_password_email.html'
    subject_template_name = 'account/password_reset_subject.txt'
    form_class = ResetPassword


class PasswordResetDone(PasswordResetDoneView):
    template_name = 'account/password_reset_done.html'

    # Reset Your Password By G-mail Account
    def send_mail(self, request, **kwargs):
        subject = "Complete the modification of the password form"
        message = "please check here"

        if request.method == "POST":
            user = User.objects.filter(email=str(request.POST['email']))
            if user.exists():
                recipient = str(request.POST.get(kwargs['Email']))
                if subject and message and recipient:
                    send_mail(subject=subject,
                              message=message,
                              from_email=settings.EMAIL_HOST,
                              auth_user=request.user.email,
                              auth_password=request.user.password,
                              recipient_list=[recipient],
                              fail_silently=False)
                return render(request, self.template_name)
            else:
                return redirect('account:password-reset')


def register(request):
    template_name = 'account/register.html'
    if request.method == 'POST':
        form = SignUp(request.POST)
        if form.is_valid():
            # save in database
            form.save()
            return redirect('account:login')
        return render(request, template_name, {'form': form})
    else:
        form = SignUp()
        return render(request, template_name, {'form': form})


@login_required
def view_profile(request):
    return render(request, 'account/profile.html', {'user': request.user})


@login_required
def edit_profile(request):
    template_name = 'account/edit_profile.html'
    if request.method == "POST":
        form = EditForm(request.POST)
        if form.is_valid():
            form.save()
            return redirect('account:view_profile')
        return render(request, template_name, {'form': form})
    else:
        form = EditForm()
        return render(request, template_name, {'form': form})

forms.py

from django.contrib.auth.forms import UserCreationForm, UserChangeForm, PasswordResetForm
from django import forms
from django.contrib.auth.models import User


class SignUp(UserCreationForm):
    email = forms.EmailField(required=True)

    class Meta:
        model = User
        fields = ('username', 'first_name', 'last_name', 'password1', 'password2', 'email')

    def save(self, commit=True):
        user = super(SignUp, self).save(commit=False)
        user.first_name = self.cleaned_data['first_name']
        user.last_name = self.cleaned_data['last_name']
        user.email = self.cleaned_data['email']

        user.set_password(self.cleaned_data['password1'])
        # Save this session without saving in database
        if commit:
            user.save()
        return user


class ResetPassword(PasswordResetForm):
    email = forms.EmailField(required=True, widget=forms.TextInput(attrs={'placeholder': 'Type Email'}))

    class Meta:
        model = User
        fields = ('email',)


class EditForm(UserChangeForm):
    password = None

    class Meta:
        model = User
        fields = ('first_name', 'last_name', 'email')

    def edit(self, fields):
        user = super(EditForm, self).save(commit=False)

        if user.commit:
            user.save()
        return user

settings.py

EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
# sending an email
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_PORT = 587
EMAIL_HOST_USER = 'medoabdin@gmail.com'
EMAIL_HOST_PASSWORD = 'medo_rko96'
EMAIL_USE_TLS = True
EMAIL_USE_SSL = False

models.py

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


class UserProfile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    overview = models.TextField(editable=True, help_text="This field is important to make the viewers know you and your experience")
    city = models.CharField(max_length=20)
    phone = models.IntegerField(default=0)
    logo = models.ImageField()

    def __str__(self):
        return self.user.username


def create_profile(sender, **kwargs):
    if kwargs['created']:
        user_profile = UserProfile.objects.create(user=kwargs['instance'])


post_save.connect(receiver=create_profile, sender=User)

the format of the database as following

1 个答案:

答案 0 :(得分:0)

用户在您的方法try catch中使用send_mail,并用filter更改get,例如下面的行

user = User.objects.get(email=str(request.POST['email']))

如果在数据库中找不到用户,则get方法将尝试查找用户,然后它会引发user.DoesNotExist异常,您可以捕获它并做您想做的任何事情。

就像:-

def send_mail(self, request, **kwargs):
    subject = "Complete the modification of the password form"
    message = "please check here"

    if request.method == "POST":
        try:
            user = User.objects.get(email=str(request.POST['email']))
            recipient = str(request.POST.get(kwargs['Email']))
            if user.is_active and subject and message and recipient:
                send_mail(subject=subject,
                          message=message,
                          from_email=settings.EMAIL_HOST,
                          auth_user=request.user.email,
                          auth_password=request.user.password,
                          recipient_list=[recipient],
                          fail_silently=False)
            return render(request, self.template_name)
        except user.DoesNotExist:
            return redirect('account:password-reset')