2017-08-16 105 views
0

在使用Django构建的网站注册期间,是否有简单的方法来强制使用唯一的电子邮件地址? 我见过一些“插件?”像HMAC,但它似乎有点太复杂,我试图实现。在Django注册期间强制使用唯一的电子邮件地址

此外,是否有可能只接受来自域名列表的注册? (如只有来自“@ google.com”的电子邮件)

回答

1

我遇到了同样的问题,并通过将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提供的所有基本功能。

  1. 登录
  2. 注销
  3. 在你的意见:你可以得到用户实例中:request.user

我想建议你可能需要一些额外的代码(在形式.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. 

我希望这将引导您。谢谢。

+0

现在,这是一个指导!非常感谢你!!将尽快工作。 – willer2k

相关问题