覆盖 Django 用户模型

Posted

技术标签:

【中文标题】覆盖 Django 用户模型【英文标题】:Override Django User Model 【发布时间】:2018-03-07 00:01:33 【问题描述】:

我正在编写一个 Django 应用程序。我想,原因如下:

1) 我想使用 LDAP 进行身份验证。因此,我不需要 Django 身份验证。

2) 我已经有一个用户表,我想重用该表。我不想让 Django 为我创建一个 dup 表。表结构也不能很好地“适合” Django 用户模型。

因此,我想重写 Django User 类。

有没有人可以借鉴的好例子?

【问题讨论】:

【参考方案1】:

已经有 django 库用于使用 LDAP 进行身份验证。我想我过去成功使用过django-auth-ldap。 (虽然我通常需要 LDAP 专家来帮助我进行配置。)

documentation 包含有关如何实现自定义用户模型的说明。首先执行此操作要容易得多(甚至在您运行第一次迁移之前)。

【讨论】:

【参考方案2】:

如果您想使用自己的用户表,您需要查看AbstractBaseUser,此处记录了该信息:

https://docs.djangoproject.com/en/1.11/topics/auth/customizing/#django.contrib.auth.models.AbstractBaseUser

使用它,您必须使用USERNAME_FIELD 定义将哪个字段用作模型中的用户名。如果您想手动应用更改并自己保持模型和数据库表同步,您可能还想将模型设置为 managed = False

我在 Django-python3-ldap 上遇到了最好的运气:https://github.com/etianen/django-python3-ldap

多年来,我们一直在生产环境中使用 Python 3 和 OpenLDAP,它还支持 Active Directory。祝你好运!

【讨论】:

以上是关于覆盖 Django 用户模型的主要内容,如果未能解决你的问题,请参考以下文章

保存自定义用户模型时 Django ManyToMany 覆盖

如何从 Django 模型(覆盖)save() 函数向视图发送警报或消息?

如何创建作为多个查询联合的 Django 模型字段,以实现覆盖字段?

关于覆盖外键表单小部件以接收用户输入的 Django 最佳实践

Django ImageField 为空时覆盖现有路径

覆盖 Django InlineModelAdmin 上的 save_model