使用Django User-Model还是创建自己的Model?

时间:2011-03-17 09:45:47

标签: python django design-decisions django-users

我目前正在设计一个基于Django的网站。为简单起见,我们假设它是一个简单的社区站点,用户可以登录并向其他用户写入消息。

我目前的选择是使用buildin用户模型或构建我自己的东西。我不需要buildin User:没有用户名(你的电子邮件地址是你的用户名),但你设置了一个你可以选择的内部名称,可供多个用户使用(如Facebook的)。此外,我不需要权限系统,因为访问其他人不会基于组。因此,我最终只使用buildin User中的email,firstname,lastname和password字段,其他所有内容都将放在UserProfile中。 另一方面,buildin用户系统将在网站的后端派上用场,因为我有可能需要一个基于组的权限系统。

总而言之,在我看来,我宁愿构建我的一个用户模型,只使用buildin来访问管理员后端。

我的反思有什么问题吗?

4 个答案:

答案 0 :(得分:9)

  

我的反思有什么问题吗?

  

我目前的选择是使用buildin用户模型或构建我自己的东西。

还有第三种选择。

http://docs.djangoproject.com/en/1.2/topics/auth/#storing-additional-information-about-users

  

其他所有内容都将放在UserProfile

正确。

  

构建我的一个用户模型并仅使用buildin来访问admin后端

不要建立自己的。

这样做:

  

如果您想存储额外的   与您的用户相关的信息,   Django提供了一种指定方法   特定于站点的相关模型 - 称为   “用户档案” - 为此目的。

答案 1 :(得分:2)

作为django-primate的作者,我想补充一些评论。 Django-primate很容易让ju修改内置的User模型就是为了这个。你可能只需要一些额外的东西,然后使用django-primate。

但是有问题,虽然我不认为修改django用户模型本身就是一个问题。一个问题是“用户”非常不同,管理员用户和一些其他用户通常不相关。例如,当管理员登录然后想要以“普通用户”身份登录网站时,这可能会导致问题,他们不希望这些帐户相关,也不希望以管理员用户身份自动登录。这无缘无故会导致头痛。它还会导致许多其他令人头疼的事情来实现推荐的相关Profile模型,如果您想要使用身份验证装饰器,通常需要确保每个配置文件都有一个contrib用户和每个contrib用户的配置文件。 “用户”的形式和管理使这更加麻烦。简而言之:通常会在某个时刻出现问题,这是一个诅咒

除了管理员之外,我大部分时间都放弃了contrib用户模型。构建另一个用户模型实际上是你想要的,但你也想要该用户的身份验证部分,因此django contrib User的常见用法(出于错误的原因使用它)。如果您遇到这种情况,最好的解决方案是为该自定义用户模型构建自己的身份验证。这实际上非常简单,我不能推荐这种方法。我认为官方建议是错误的,应该有很好的工具来验证django中内置的自定义用户模型。

答案 2 :(得分:1)

您可能想看看最近创建的django-primate:https://github.com/aino/django-primate

我曾经构建了一个自定义用户模型,继承自默认模型。但是,我不推荐它。

答案 3 :(得分:0)

目前,您有一些要求,但随着时间的推移,它们可能会发生变化。 Django的用户系统非常简单,使用它可以更容易地适应一些最常见的用例。
要考虑的另一个方面是,您可以使用几种已经可用的应用程序,这可能需要Django的用户。使用您自己的模型可能会使这些模块的使用变得更加困难。

另一方面,为了符合您当前的要求而攻击Django的用户系统可能会非常棘手。
此外,将“自定义用户”迁移到“Django用户”总是可行的,因此您并没有真正关闭那扇门。

总的来说,我认为这取决于你对'用户'的意思 如果你只是一个注册,并没有与核心Django功能的真正互动,那么我认为一个单独的模型就足够了,特别是因为你可以随时迁移,只需要相对较少的努力。
但是,如果您的应用程序的“用户”映射到与Django非常类似的东西,那么我将使用Django用户模型。