【问题标题】:Same username and email for django user?django 用户的用户名和电子邮件相同吗?
【发布时间】:2016-12-30 01:09:44
【问题描述】:

我正在使用 django-registration 包制作一个 django 网站。我希望用户使用他们的电子邮件注册并且没有用户名,这样我就可以使用他们的真实姓名(如在 facebook 上)并通过他们的电子邮件跟踪他们。

我将需要一个用户配置文件,并计划稍后使用 oneToOne 字段扩展用户模型,但现在我不确定如何使用他们的电子邮件作为用户名。我想我可以简单地向用户询问他们的电子邮件并将其存储为用户名,这将是一个简单的修复。但是,它需要我修改所有表单,并且会在数据库中创建基本上重复的列(电子邮件 = 用户名)。

这个问题真的是开放式的,我想知道是否有一种简单的方法可以更改用户模型中间项目。我已经阅读了有关 User(AbstractUser) 类的文档,但这似乎只有在我们刚刚开始项目时才有用。

谢谢,我们将不胜感激。

【问题讨论】:

    标签: python django django-models django-users


    【解决方案1】:

    您可以通过扩展 AbstractBaseUser 来编写自定义用户类,并将您的电子邮件字段声明为 USERNAME_FIELD,如:

    USERNAME_FIELD = 'email'
    

    另一种不扩展 AbstractBaseUser 的解决方法是在您的 apps.py 中导入用户模型并设置 USERNAME_FIELD 如下:

    from django.contrib.auth.models import User
    User.USERNAME_FIELD = 'email'
    

    【讨论】:

    • 能否提供更多细节,我仍然很迷茫。这似乎是一个非常简单直接的修复,但我无法正确实现它。谢谢!
    • django.contrib.auth.models.User 使用username 来唯一标识用户。如果您想覆盖此行为,您有两个选项,或者编写自定义身份验证后端,允许您使用django.contrib.auth.models.User 的非唯一email 字段标记为USERNAME_FIELD,或者通过继承AbstractUser 类编写自定义用户模型。如果您不想在身份验证后端搞砸,我建议您编写自定义用户模型。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-05
    • 2015-04-27
    • 1970-01-01
    • 1970-01-01
    • 2011-09-15
    • 2013-01-18
    • 2011-04-02
    相关资源
    最近更新 更多