我写了一些代码来注册一个用户。在我的功能“注册(请求)”中,在我进行电子邮件验证之前,我保存了用户,他被保存在数据库中,但他未处于活动状态。然后,我使用该用户在我的功能“激活(请求)”中激活他,然后我激活该用户。 但有一个问题,如果用户输入了错误或不正确的电子邮件,他将被保存在数据库中,这可能会占用数据库中无用的内存空间。另一个问题是,如果用户想要更正注册页面上的信息,他将无法这样做,因为他的用户名和电子邮件已经存在于数据库中
编辑 他说他放错了电子邮件,这就是他放错邮件的原因username@gmail.com而不是用户_name@gmail.com. 电子邮件已输入,格式良好,但这不是他的电子邮件
def register(request):
registered = False
if request.method == 'POST':
form = UserForm(data=request.POST)
if form.is_valid():
user = form.save(commit=False)
user.is_active = False
user.save()
current_site = get_current_site(request)
mail_subject = 'Activez votre compte acquisitor.'
message = render_to_string('users/acc_active_email.html',{
'user': user,
'domain': current_site.domain,
'uid': urlsafe_base64_encode(force_bytes(user.pk)).decode(),
'token': account_activation_token.make_token(user),
})
to_email = form.cleaned_data.get('email')
email = EmailMessage(
mail_subject, message, to=[to_email]
)
email.send()
return render(request, 'users/mail_registration.html')
else:
print(form.errors)
else:
form = UserForm()
return render(request, 'users/registration.html', {'user_form': form,
'registered': registered})
def activate(request, uidb64, token, backend='django.contrib.auth.backends.ModelBackend'):
try:
uid = force_text(urlsafe_base64_decode(uidb64))
user = User.objects.get(pk=uid)
except(TypeError, ValueError, OverflowError, User.DoesNotExist):
user = None
if user is not None and account_activation_token.check_token(user, token):
user.is_active = True
registered = True
user.save()
login(request, user, backend)
return HttpResponseRedirect(reverse('index'))
else:
return HttpResponse("Lien d'activation invalide")
您的表单应该验证电子邮件字段是否已填写,并且至少在形式上是正确的,因此唯一的可能性是用户键入了错误的电子邮件。一个常见而有效的解决方案(尽管从用户的角度来看有点烦人)是在表单中放置两个电子邮件字段,并检查它们是否与表单的
clean()
数据匹配在这一点上,如果用户仍然设法弄错了,他无论如何也不会收到激活邮件,因此除了最终添加cron作业以删除从未激活其帐户的用户(基于活动状态、创建日期和上次登录日期)之外,您无能为力
相关问题 更多 >
编程相关推荐