如何管理在注册中放置错误电子邮件但保存在数据库中的用户

2024-04-23 15:41:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我写了一些代码来注册一个用户。在我的功能“注册(请求)”中,在我进行电子邮件验证之前,我保存了用户,他被保存在数据库中,但他未处于活动状态。然后,我使用该用户在我的功能“激活(请求)”中激活他,然后我激活该用户。 但有一个问题,如果用户输入了错误或不正确的电子邮件,他将被保存在数据库中,这可能会占用数据库中无用的内存空间。另一个问题是,如果用户想要更正注册页面上的信息,他将无法这样做,因为他的用户名和电子邮件已经存在于数据库中

编辑 他说他放错了电子邮件,这就是他放错邮件的原因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")

Tags: to用户formtoken数据库falsereturnif
1条回答
网友
1楼 · 发布于 2024-04-23 15:41:04

if the user put a wrong or not email

您的表单应该验证电子邮件字段是否已填写,并且至少在形式上是正确的,因此唯一的可能性是用户键入了错误的电子邮件。一个常见而有效的解决方案(尽管从用户的角度来看有点烦人)是在表单中放置两个电子邮件字段,并检查它们是否与表单的clean()数据匹配

在这一点上,如果用户仍然设法弄错了,他无论如何也不会收到激活邮件,因此除了最终添加cron作业以删除从未激活其帐户的用户(基于活动状态、创建日期和上次登录日期)之外,您无能为力

相关问题 更多 >