【问题标题】:Django custom user VS user profileDjango 自定义用户 VS 用户配置文件
【发布时间】:2013-09-08 15:42:53
【问题描述】:

我目前正在使用 Django 1.5.1 并使用官方文档中描述的自定义用户。我意识到所有东西都存储在一张桌子下,auth_user 一张。

我的问题是,为什么将所有内容都放在一个大表中,而不是像过去 1.5 之前那样通过使用 user_profile 表来存储所有其他数据而使用 2 个表更好?它看起来比以前更聪明了,如果我们想为用户信息添加 20 个新字段,那么将所有内容都放在 auth_user 中是很奇怪的。

就我而言,现在我有 class MyUser(AbstractUser) 和 2 个附加字段 genderdate_of_birth,所以这一切都很好,但现在我想要很多其他信息(文本字段),比如“最喜欢电影”、“最喜欢的书”、“爱好”、“我离不开的 5 件事”等,以获取有关我的用户的更多信息。所以我只是想知道我是否应该把它放在MyUser 类下,还是应该定义一个UserProfile 类?为什么?

谢谢!

【问题讨论】:

    标签: python django django-authentication django-registration django-1.5


    【解决方案1】:

    当您将所有内容都放在一张表中时,数据库访问速度会更快。使用旧方式,您必须在辅助表上join 才能获取用户的所有信息。

    通常当您看到One-to-One 关系时,最好将它们合并到一个表中。

    但是新的自定义User 模型还解决了另一个问题,即用户应该具有什么属性?哪些属性对您的应用程序至关重要?是否需要电子邮件?电子邮件是否也应该是用户登录的用户名?

    在引入此功能之前,您无法做到这些。

    关于您关于在何处放置“爱好”等其他用户信息的问题,这实际上取决于您查询/需要此属性的频率。他们只会出现在用户的个人资料页面上吗?那么你可以把它们放在一个单独的表中,不会有太大的问题或性能影响。否则更喜欢将它们存储在与User 相同的表中。

    【讨论】:

    • 好的,谢谢你的解释。现在,我使用用户名作为主要的必填字段,而不是电子邮件。但是为了登录用户,我创建了一个自定义 EmailBackend 来检查用户名和电子邮件地址,以便在身份验证时能够同时使用两者。但我清楚地看到为什么这个自定义用户在这里提供帮助,这真的很好。
    • 关于我应该使用什么,它主要是一个社交应用程序,人们可以在其中查看其他人的个人资料,因此这些信息会更频繁地显示,甚至相当密集。你仍然认为将所有内容存储在自定义用户表下会更好吗?
    • @Dachmt 例如,在像这里这样的站点中,我会将它们存储在单独的表中。在你的情况下,这取决于。 favorite movies 是否可以在每个自己的表中进行非规范化以避免重复?它会涉及用户对他们的电影进行评分吗?那么可能是的。但这取决于每个属性的功能。如果我有一组不超过 20-30 的半信息属性,我会把它们放在同一张表中。
    • 它将被存储为文本,因此favorite movies 可能看起来像“我喜欢这部电影 A,也喜欢电影 B 因为演员,但这两部电影都是有史以来最好的电影!”或“电影 A,电影,B”,这实际上取决于该人想要放置的内容,但它将是一个文本字段,可以随意放置您想要的任何内容(可以为空白)。所以这里没有重复案例。我会说我最多可能有 20 个附加参数(大约 10 个用于性别、出生日期、宗教、体重等,大约 5 到 10 个用于更一般的问题,方法是填写“最喜欢的东西”的文本字段要做”、“最喜欢的电影和书籍”等)
    • @Dachmt 是的,我觉得把它放在同一张桌子上是最好的选择。还考虑到个人资料检查将成为主要功能,我们当然可以假设它会表现得更好。
    猜你喜欢
    • 2017-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-05
    • 2011-10-30
    • 1970-01-01
    • 1970-01-01
    • 2012-08-31
    相关资源
    最近更新 更多