覆盖 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 模型字段,以实现覆盖字段?