4

因为我没有使用来自 Django 的 Auth User,所以我有自己的模型 CustomUser,我想通过这个模型在现场进行身份验证(CustomUser 不从 User 模型继承,并且根本不相关)。

class CustomUser(models.Model):
    password = models.CharField(max_length = 40)
    email = models.EmailField(max_length = 72, unique = True)
    #stuff...

我检查了https://docs.djangoproject.com/en/dev/topics/auth/#writing-an-authentication-backend,我不明白的主要是:

from django.contrib.auth.models import User

如果我想使用我的 CustomUser,我需要导入 Django 用户吗?

我找不到一个很好的教程来解释如何在没有标准身份验证用户的情况下使用 Django。

*编辑:我知道我可以使用 User 进行扩展。但我就是不想那样。问题不在于:使用用户和存储附加信息等的最佳方式是什么。不过我很感激。但是我如何在不使用身份验证用户的情况下使用自定义用户。即使我没有理由这样做。*

如果可能的话,我想知道如何。

4

3 回答 3

1

整个 Django 身份验证系统与 紧密耦合django.contrib.auth.models.User,因此您应该在后端使用它。引用Django 文档

目前,处理这个问题的最好方法是为后端存在的每个用户创建一个 Django User 对象

但这里的主要问题是:你的有什么特别之处CustomUser以至于你不能用普通User模型实现(可以扩展)?在 99% 的情况下,使用User是最好的方法。

于 2012-04-25T09:34:46.950 回答
0

也许这回答了你的问题:

来自“ https://docs.djangoproject.com/en/1.6/topics/auth/customizing/#substituting-a-custom-user-model ”:

替换自定义用户模型 Django 1.5 中的新功能。某些类型的项目可能有身份验证要求,而 Django 的内置用户模型并不总是合适的。例如,在某些网站上,使用电子邮件地址而不是用户名作为您的标识令牌更有意义。

Django 允许您通过为引用自定义模型的 AUTH_USER_MODEL 设置提供值来覆盖默认用户模型:

AUTH_USER_MODEL = 'myapp.MyUser' 这个点对描述了 Django 应用程序的名称(必须在您的 INSTALLED_APPS 中),以及您希望用作用户模型的 Django 模型的名称。

当然,需要考虑一些必要的警告(可在上面的链接中找到),但这看起来是您问题的一个很好的答案:https ://docs.djangoproject.com/en/1.6/ref/settings/#auth-用户模型

还有一些自定义模型合规性期望需要考虑(这里列出的太多了):https ://docs.djangoproject.com/en/1.6/topics/auth/customizing/#specifying-a-custom-user-model

除非 AUTH_USER_MODEL 可以有多个值(我怀疑这是理智的),否则我认为我需要构建自己的自定义身份验证后端:https ://docs.djangoproject.com/en/1.6/topics/auth/定制/#writing-an-authentication-backend

我希望这可以帮助任何其他需要不同用户和设备身份验证方案的迷失灵魂(可能是因为一些预先存在的规范使本来可以很容易的事情变得混乱)。

干杯!

于 2014-08-19T19:04:55.390 回答
0

看看这篇文章。

除了 contrib.auth.models.User 模型保存的标准名称和电子邮件地址之外,我从事的大多数 Django 项目都需要存储有关每个用户的信息。

如果您使用修订版 7477(2008 年 4 月 26 日)的主干,您的模型类可以从现有模型类继承。附加字段存储在一个单独的表中,该表链接到基本模型的表。当您检索模型时,查询使用连接从它和基本模型中获取字段。

http://scottbarnham.com/blog/2008/08/21/extending-the-django-user-model-with-inheritance/

还有这个帖子。

将 auth 应用程序复制到您自己的项目中并根据您的需要进行修改。这避免了一些维护麻烦,但首先删除了 Django 捆绑身份验证系统的实用程序。它还可能导致与期望 User 模型位于 django.contrib.auth 中的其他应用程序的兼容性问题。

http://www.b-list.org/weblog/2006/jun/06/django-tips-extending-user-model/

于 2012-04-25T10:01:20.307 回答