我有一个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,
}
)