在Django注册期间强制使用唯一电子邮件地址

在Django注册期间强制使用唯一电子邮件地址,django,Django,在使用Django创建的网站注册期间,是否有一种简单的方法强制使用唯一的电子邮件地址? 我见过一些像HMAC这样的“插件”,但对于我想要实现的东西来说,它似乎有点太复杂了 另外,是否可以只接受域列表中的注册?(例如只有来自“@google.com”的电子邮件)我遇到了同样的问题,通过将AbstractUser类扩展到我自己的类MyUser并更改默认值,解决了这个问题 然后,通过将this classMyUser作为我所有用户的默认模型类,我可以将此属性(唯一电子邮件)应用于我的web应用程序上的

在使用Django创建的网站注册期间,是否有一种简单的方法强制使用唯一的电子邮件地址? 我见过一些像HMAC这样的“插件”,但对于我想要实现的东西来说,它似乎有点太复杂了


另外,是否可以只接受域列表中的注册?(例如只有来自“@google.com”的电子邮件)我遇到了同样的问题,通过将
AbstractUser
类扩展到我自己的类
MyUser
并更改默认值,解决了这个问题

然后,通过将this class
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已经具备了用户模型所需的所有基本字段。例如:用户名、密码、电子邮件等。请全部检查

您最不希望做的事情是在setting.py中添加以下内容

AUTH_USER_MODEL = 'myuser.MyUser'
这将确保与您的web应用关联的默认用户是扩展(修改)
MyUser
类。这将为您提供django为
用户提供的所有基本功能

  • 登录
  • 注销
  • 在您的视图中:您可以在以下位置获取用户实例:
    request.user
    等等
  • 我建议您可能需要一些额外的代码(forms.py和views.py)来通过此类创建用户。我希望你能做到。这应该足以引导你走向正确的方向

    也许一个库会有所帮助,但既然你也需要对电子邮件的域进行身份验证,我认为这应该可以做到。依我的拙见,您不能总是依赖第三方库来实现所有其他功能

    最后,当您要求验证仅来自@gmail.com或@outlook.com等域的用户时,只需在django表单的clean方法中进行简单检查即可。我希望你知道如何处理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.
    

    我希望这能指引你。谢谢。

    我也遇到了同样的问题,通过将
    AbstractUser
    类扩展到我自己的类
    MyUser
    并更改默认值,解决了这个问题

    然后,通过将this class
    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已经具备了用户模型所需的所有基本字段。例如:用户名、密码、电子邮件等。请全部检查

    您最不希望做的事情是在setting.py中添加以下内容

    AUTH_USER_MODEL = 'myuser.MyUser'
    
    这将确保与您的web应用关联的默认用户是扩展(修改)
    MyUser
    类。这将为您提供django为
    用户提供的所有基本功能

  • 登录
  • 注销
  • 在您的视图中:您可以在以下位置获取用户实例:
    request.user
    等等
  • 我建议您可能需要一些额外的代码(forms.py和views.py)来通过此类创建用户。我希望你能做到。这应该足以引导你走向正确的方向

    也许一个库会有所帮助,但既然你也需要对电子邮件的域进行身份验证,我认为这应该可以做到。依我的拙见,您不能总是依赖第三方库来实现所有其他功能

    最后,当您要求验证仅来自@gmail.com或@outlook.com等域的用户时,只需在django表单的clean方法中进行简单检查即可。我希望你知道如何处理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.
    

    我希望这能指引你。谢谢。

    这是一本指南!谢谢你!!我会尽快开始工作。现在这是一个指南!谢谢你!!我会尽快开始工作。