【问题标题】:Django AbstractBaseUser vs BaseUserManager when creating custom user创建自定义用户时的 Django AbstractBaseUser vs BaseUserManager
【发布时间】:2017-07-18 04:26:03
【问题描述】:

我有一个具有特定字段的 django 应用程序,所以我决定创建一个新的用户模型。我完全按照文档进行了操作,但我无法从here 扩展AbstractBaseUserBaseUserManager

1) 为什么我需要扩展两个类来创建单个用户模型。我想知道我们在MyUserManagerMyUser 中指定的字段是否相似。
2)MyUserManagerMyUser 中的电子邮件字段specified here 之间是否有任何相似之处,或者两者都相同?

在我的应用程序中,我想使用手机号码(Charfield max_length=12)作为登录既不是电子邮件也不是用户名

3) Django 提供了如何使用电子邮件创建自定义用户模型
然后我还有另一个具体问题,我是否还需要在 create_usercreate_superuserAbstractBaseUser 模型中指定移动字段。

如果您提供手机号码为USERNAME_FIELD 的摘录,那将非常有帮助。

我知道这些是基本的 django 问题,但如果您想创建自定义用户模型,您可能会多次遇到这些问题

【问题讨论】:

    标签: django


    【解决方案1】:

    问题 1 的答案 您需要扩展两个类,因为 Django 有两个用户类。一个是User 模型,另一个是UserManager。对于简单的任务,我们不需要修改管理器类。但出于您的目的,您确实需要它。请注意,管理器类没有任何字段名称,而是有两种方法。一种方法用于创建普通用户,另一种方法用于创建超级用户。当您使用python manage.py createsuperuser 之类的命令时,会调用这些方法。

    在 Django 文档中建议扩展用户类的最佳方法是创建另一个类以获取额外信息。见this answer

    问题 2 的答案 MyUserManager类中没有email字段,仔细看。

    问题 3 的答案 如果我是你,我只会将手机号码保存在 username 字段中。这样,作为 USERNAME_FIELD 的移动设备的所有后台任务都已得到处理。但是,如果您想扩展您的用户类,那么我想您必须在管理器类方法中提及移动字段,因为它们用于创建用户。

    注意:- 请查找validators 并使用它来验证您的手机号码。这将检查提供手机号码的用户是否具有正确的格式。我猜您的系统将通过 SMS 网关 API 将代码作为文本消息发送到用户的手机。您不想在因用户错误而无法收到的短信上浪费金钱。

    【讨论】:

    • 感谢重播,关于 QA 2) 实际上我正在谈论的电子邮件字段 def create_user(self, email, date_of_birth, password=None): 电子邮件参数到 create_usercreate_superuser 这是否与 MyUser 模型相同的字段跨度>
    • 是的。此参数中的值保存在 User 模型的电子邮件字段中。
    • 如何为 AbstractBaseUser 模型创建视图以连接到 Angular 前端?
    猜你喜欢
    • 2019-07-20
    • 2015-02-12
    • 2013-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-15
    • 2019-10-17
    相关资源
    最近更新 更多