django - 扩展 Django 中的默认用户模型

标签 django django-allauth django-users django-2.0

我已经编写了我的第一个应用程序 Django 2.0

当我意识到将 id 主键字段从默认 integer 类型替换为 UUID 时,一切工作正常,应用程序几乎准备就绪让数据库录入更加安全。

当我搜索如何将用户表的 id 更改为 UUID 时,我得到了许多扩展 AbstractBaseUser 的教程。

这是我编写的自己的User模型。

account/models.py

class User(AbstractBaseUser):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)

但是我对不同来源的示例更加困惑。

每个示例都在扩展模型中添加更多字段,例如

first_name
last_name
is_staff
is_admin
active

其功能为

def get_fullname(self):
def get_shortname(self):
etc.

我认为所有这些字段和函数默认都存在于 AUTH_USER_MODEL 中。

扩展AbstractBaseUser是否会覆盖AUTH_USER_MODEL并且需要添加默认情况下存在的所有字段?

此外,我在不同模型中使用 settings.AUTH_USER_MODEL 作为外键。 是否应该替换为account.User模型?

我还使用 django-allauth 插件来启用使用社交网络的登录,并仅使用电子邮件进行身份验证。 我是否需要使用 unique=True 在扩展模型中添加 email 字段?

最佳答案

Django AbstractBaseUser仅提供以下字段:password、last_login、is_active。因此,如果您使用继承自 AbstractBaseUser 的自定义用户模型您需要定义所有其他字段,例如 email手动。 作为问题的另一部分,只需添加 AUTH_USER_MODEL = 'users.User'添加到您的 settings.py 文件应该使一切正常,而无需替换项目中的代码。

UPD 如果您需要像 first_name 这样的字段, last_name等包含在您可以使用的模型中 AbstractUser而不是AbstractBaseUser .

关于django - 扩展 Django 中的默认用户模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48064977/

相关文章:

python - 我应该在 .gitignore 文件中添加 Django 迁移文件吗?

django - 覆盖重新验证密码重置电子邮件问题

django - 如何在 Django 中导入用户模型并选择所有对象

Django如何在删除用户后删除用户的个人资料和帖子以及所有关联?

python - Django - 使用 Django 学习网站开发 - 无法确定views.py或urls.py中是否存在语法错误

django - API Root 没有带有 JWT_Authentication 的 has_permissions

python - 在 Django 中通过 View 上下文将数据传递给 javascript

django - 使用电话或电子邮件登录/注册 django、allauth 集成

python - Django AllAuth - 如何手动发送重置密码电子邮件?

django - 如何在 django 中实现自定义用户管理器?