Python 如何在发送电子邮件之前设置验证电子邮件条件?
如果电子邮件不存在,我如何设置条件?请不要将此电子邮件发送到我自己的电子邮件 我在这里尝试,当我放置(exists)方法时,但我看到它似乎不起作用Python 如何在发送电子邮件之前设置验证电子邮件条件?,python,django,sendmail,Python,Django,Sendmail,如果电子邮件不存在,我如何设置条件?请不要将此电子邮件发送到我自己的电子邮件 我在这里尝试,当我放置(exists)方法时,但我看到它似乎不起作用 在这两种情况下,都会向我显示电子邮件成功消息 我怎样才能阻止它呢? 如果我的代码中有一个错误变成了错误,我希望得到处理该错误的建议 对不起,我的英语不流利 views.py from .forms import SignUp, ResetPassword, EditForm from website import settings from djan
在这两种情况下,都会向我显示电子邮件成功消息
我怎样才能阻止它呢?
如果我的代码中有一个错误变成了错误,我希望得到处理该错误的建议 对不起,我的英语不流利 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
设置.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)
用户使用
在您的方法发送邮件中尝试catch
,并使用获取更改过滤器
,如下面的一行
user = User.objects.get(email=str(request.POST['email']))
Get方法将尝试查找用户,如果在数据库中找不到,则会引发user.DoesNotExist
exception您可以捕获它并执行任何您想要的操作
比如:-
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')
错误是什么?请指定您的问题。不要出错。当我使用以下代码时:if user.exists():,它不起作用。如何检查电子邮件是否有效或存在?结果是相同的@Ansh JDo您的数据库中有用户吗?你能分享这个例子吗,比如你把什么样的数据放进了电子邮件,并查看了数据库。数据库中的值是多少。我确实编辑了我的帖子。我向您提供了关于我的项目的所有信息,我也向您提供了数据库的屏幕截图。您能告诉我您从下面得到了什么吗:-user=user.objects.get(email=str(request.POST['email'))
您可以使用调试器导入pdb;pdb.set_trace()
AnonymousUser是django中的有效用户,您需要设置一个条件来检查not AnonymousUser。比如'if not user.is_anonymous:'或者您可以检查user.is_active for AnonymousUser它将始终为false。