2011-03-17 101 views
4

我目前正在设计一个基于Django的网站。为了简单起见,我们假设它是一个简单的社区站点,用户可以登录并将消息写入其他用户。使用Django用户模型或创建自己的模型?

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

总而言之,它看起来对我来说,我更愿意构建我的一个用户模型,并使用buildin仅用于访问管理后端。

我的思考有什么问题吗?

回答

9

我的反射有什么不对吗?

是的。

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

还有第三选择。

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

一切将被放置在用户配置

正确的。

建立我的一个用户模型,并使用唯一的buildin访问管理员后台

不要建立你自己的。

这样做:

如果你想存储与用户的其他信息 , Django提供指定一个特定的站点 相关模型的方法 - 称为 “用户配置文件“ - 以此目的。

+0

不错答案s.Lott;) – Efazati 2011-03-17 10:06:45

0

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

另一方面,黑客Django的用户系统,以符合您目前的要求可能会很棘手。
此外,将“自定义用户”迁移到“Django用户”总是有可能的,所以你并没有真正关闭那扇门。总的来说,我认为这取决于你对'用户'的意思。
如果您的意思只是注册,并且与核心Django功能没有真正的交互,那么我认为一个单独的模型就足够了,尤其是因为您可以随时进行迁移,只需很少的工作。
但是,如果你的应用程序的'用户'映射到与Django非常相似的东西,那么我会使用Django用户模型。

2

作为django-primate的作者,我想补充一些意见。 Django-primate可以轻松地修改内置的用户模型,就是为了这个目的。你可能需要一些额外的东西,然后使用django-primate。

但也有问题,虽然我不认为修改django用户模型本身是一个问题。一个问题是,“用户”是非常不同的,管理员用户和其他用户往往没有关系。当例如管理员登录然后想要以“普通用户”的身份登录到网站时,这可能会导致问题,他们不希望这些帐户相关并且不希望以admin用户身份自动登录。这不会导致头痛。它还会导致很多其他令人头痛的事情来实现推荐的相关配置文件模型,如果您想要使用身份验证装饰器,则通常需要确保每个配置文件和每个contrib用户都有一个contrib用户。 “用户”的形式和管理使这更加繁琐。总之:通常在这个过程中会出现一些错误,这是一个诅咒

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

相关问题