【问题标题】:Custom user model in Django?Django中的自定义用户模型?
【发布时间】:2015-06-18 04:14:16
【问题描述】:

我知道如何制作自定义用户模型,我的问题是关于样式和最佳实践。

在 Django 中自定义用户模型的后果是什么?使用辅助一对一模型真的更好吗?

例如,如果我有一个与User 一对一的UserProfile 模型,我应该在UserProfile 或@ 之间创建friends 关系(仅特定于我的应用程序) 987654325@?

而且所有 3rd-party 包都依赖于get_user_model(),所以看起来如果我不使用自定义用户模型,你的所有关系都应该转到User,对吧?但是我还是不能给User添加方法,所以如果Userfriends关系,我想添加recent_friends方法,我应该把这个方法添加到UserProfile。这对我来说看起来有点不一致。

如果有 Django 经验的人能给出清晰的见解,我会很高兴。

【问题讨论】:

    标签: python django django-models django-orm


    【解决方案1】:

    我肯定会推荐使用自定义用户模型 - 即使您使用的是一对一的配置文件。如果您已承诺使用默认用户模型,那么迁移到自定义用户模型非常困难,而且您几乎总是希望在用户模型中添加至少一些自定义逻辑。

    您是否使用配置文件或进一步扩展用户模型应基于通常适用于您的数据库结构的所有考虑因素。正确的™ 决定取决于您个人资料的确切详细信息,只有您自己知道。

    【讨论】:

      【解决方案2】:

      所有 3rd-party 包都依赖于 get_user_model(),所以看起来如果我不使用自定义用户模型,你所有的关系都应该交给用户,对吧?但是我还是不能给User添加方法,所以如果User有好友关系,我想添加recent_friends方法,我应该把这个方法添加到UserProfile中。

      过去我走的是“一对一”路线,最后我完全不喜欢我的应用程序的设计,在我看来它迫使你远离 SOLID。所以如果我是你,我宁愿继承 AbstractBaseUserAbstractUser

      AbstractBaseUser 只为您提供User 的核心实现,然后您可以根据需要扩展模型。 根据您使用的第 3 方包类型,您可能需要的不仅仅是核心实现:如果是这种情况,只需扩展 AbstractUser,它可以让您扩展 User 的完整实现。

      【讨论】:

        猜你喜欢
        • 2014-02-07
        • 1970-01-01
        • 1970-01-01
        • 2013-03-21
        • 1970-01-01
        • 1970-01-01
        • 2012-06-28
        • 2014-01-04
        • 2021-04-15
        相关资源
        最近更新 更多