Django:在创建用户之前验证电子邮件

时间:2020-10-18 20:50:42

标签: django django-models django-views django-templates

我有一个Django项目。我想在创建用户帐户之前验证电子邮件。最好的方法是什么?我决定先创建一个独立模型,但现在我很困惑。

我决定不使用allauth模型,因为它太复杂了。相反,我生成一个随机数并通过电子邮件发送。确认激活码后,用户应输入密码。获取验证的电子邮件和密码后,我需要创建一个用户模型。电子邮件将用作用户名。

EmailVerifyModel

class EmailVerifyModel(models.Model):
    email = models.EmailField(help_text=_('A valid email address please'))
    isVerified = models.BooleanField(default=False)
    activation_code = models.IntegerField(blank=True)

EmailVerifyForm

class EmailVerifyForm(forms.ModelForm):
    email = forms.EmailField(widget = forms.TextInput(attrs={
        "type": "email",
        "name": "email",
        "id": "email",
        "placeholder": _("Email"),
        "class": "form-control form-control-md",
        "required": ""
    }), label = "")

    class Meta:
        model = EmailVerifyModel
        fields = ('email', 'activation_code')
        widgets = {
            'activation_code': NumberInput(attrs={'class': 'form-control','placeholder': 'Verification code'}),
        }

查看

def signup_view(request):
    form = EmailVerifyForm(request.POST or None)
    email_verified = False
    
    if form.is_valid():
        
        new_email = form.save(commit=False)
        pin = randint(1000,9999)
        new_email.activation_code = pin
        new_email.save()

        cd = form.cleaned_data

        if not cd['activation_code']:
            current_site = get_current_site(request)
            subject = _('Verify Your Email')
        
            email_body = render_to_string('email/verify-email.html', {
                        'domain': current_site.domain,
                        'token': pin,
                    })
            msg = EmailMessage(subject, email_body, 'no-reply@test.com', ['test@test.com'])
            msg.send()
            email_verified = True

        elif cd['activation_code']:
            email = EmailVerifyModel.objects.get(email = form.instance.email)
            print('user with email', email)


    return render(
        request,
        'signup.html',
        {
            'form': form,
            'email_verified': email_verified, 
        }
    )

0 个答案:

没有答案
相关问题