django - Django:在创建用户之前验证电子邮件
问题描述
我有一个 Django 项目。我想在创建用户帐户之前验证电子邮件。最好的方法是什么?我决定先创建一个独立的模型,但我现在很困惑。
我决定不使用 allauth 模型,因为它太复杂了。相反,我正在生成一个随机数并通过电子邮件发送。确认激活码后,用户应输入密码。获得经过验证的电子邮件和密码后,我需要创建一个用户模型。电子邮件将用作用户名。
电子邮件验证模型
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)
电子邮件验证表格
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,
}
)
解决方案
推荐阅读
- java - 获取 DJI UX 拍摄的图像
- python-2.7 - Python 比较运算符
- vba - Enterprise Architect 的工件注释中未显示新行
- java - 如何通过 micronaut Http Client 将 grails 应用程序连接到 Consul?
- javafx - 如何在 Java FX 11 中实现 JavaFX 2.2 示例
- django - ModuleNotFoundError:没有名为“social_django_urls”的模块
- node.js - 在不同的文件夹中创建帖子
- sql-server - 在 SQL Server 中用新的 Int FK 替换 varchar FK
- php - Yii2 - 测验 - 使用多对多表
- git - 拉取请求不作为 Github 中的合并(但不是 Bitbucket/Gitlab)