在使用Django构建的网站注册期间,是否有一种简单的方法可以强制使用唯一的电子邮件地址? 我见过一些“插件”?像HMAC一样,但对于我想要实现的目标来说,它看起来有点过于复杂。
此外,是否可以仅从域列表中接受注册? (例如只有来自“@ google.com”的电子邮件)
答案 0 :(得分:2)
我有同样的问题并通过将AbstractUser
类扩展到我自己的类MyUser
并更改默认值来解决它。
然后,通过将此类MyUser
作为所有用户的默认模型类,我可以将此属性(唯一的电子邮件)应用于我的Web应用程序上的所有用户。
创建应用 myuser 。在models.py中:
from django.contrib.auth.models import AbstractUser
#create your own user class.
class MyUser(AbstractUser):
def __init__(self, *args, **kwargs):
self._meta.get_field('email').blank = False
self._meta.get_field('email')._unique = True
super(MyUser, self).__init__(*args, **kwargs)
#Changed the defaults above.
#Give any additional field you want to associate your user with.
注意:AbstractUser 已经拥有了用户模型所需的所有基本字段。例如:用户名,密码,电子邮件等。检查所有here。
您要做的最后一件事是在您的setting.py
中添加以下内容AUTH_USER_MODEL = 'myuser.MyUser'
这将确保与您的Web应用程序关联的默认用户是扩展(已修改)MyUser
类。这将为您提供django为User
提供的所有基本功能。
request.user
等我想建议你可能需要一些额外的代码(在forms.py和views.py中)来通过这种类创建用户。我希望你能做到这一点。这应该足以引导您朝着正确的方向前进。
也许图书馆会有所帮助,但由于您需要对电子邮件域名进行身份验证,我认为这应该可以解决问题。在我看来,你不能总是依赖第三方库来获得其他所有功能。
最后,当您要求对来自@ gmail.com或@ outlook.com 等域的用户进行身份验证时,只需检查django表单中的“干净方法”即可。我希望你知道如何处理django表单。如果没有,那么你可以在官方文档中了解它们。它们是Django的重要组成部分。
您可以使用以下逻辑检查电子邮件:
email = self.cleaned_data['email']
email_source = email.split('@')[-1]
#email_source will now have values like: gmail.com, outlook.com etc
#you can now validate email_source now like:
permitted_sources = ['gmail.com' , 'outlook.com' , ]
if email_source in permitted_sources:
return cleaned_data
else:
raise forms.ValidationError('Error Message')
#Note: This logic should be kept in your clean method.
我希望这能指导你。感谢。