gpt4 book ai didi

python - 使用自定义模型和 mongodb 进行 Django 用户身份验证

转载 作者:行者123 更新时间:2023-12-01 09:06:15 24 4
gpt4 key购买 nike

我对 Django 和图形数据库并没有真正的经验。但我需要在 Django 中使用 MongoDB 设置用户身份验证。

我使用 pymongo 绕过 Django 数据库设置连接到数据库。但我还是想用Django认证。为此,我实际上应该创建一个从 AbstractBaseUser 扩展的用户模型,创建从 BaseUserManager 扩展的自定义用户管理器,并在中注册 AUTH_USER_MODEL设置。

我还创建并注册了自定义后端,它返回我的自定义 User 对象。

但问题是,Django 似乎尝试使用其数据库(设置中的 sqlite)验证我的 User 模型,但找不到 USERNAME_FIELD (因为实际上我没有使用这个数据库。我不知道如何告诉Django它不需要关心它。

请问您有什么建议吗?

最佳答案

看起来您需要告诉 Django 显式使用 MongoDB 作为后端数据库。网上有很多教程,但是,根据我的经验,我可以推荐的最好的一个是“djongo”。

(venv) $ pip install djongo && pip freeze > requirements.txt

如果您没有安装虚拟环境,则只需使用:

$ pip install djongo

然后在settings.py中:

DATABASES = {
‘default’: {
‘ENGINE’: ‘djongo’,
‘NAME’: ‘your-db-name’,
}
}

就是这样!理论上就这么简单。 (减去您想要添加的任何额外数据库配置)。

要解决 USERNAME_FIELD 问题,只需在扩展 User 类中使用类似的内容即可:

class User(AbstractBaseUser, PermissionsMixin):
email = models.EmailField(_('email address'), unique=True)
first_name = models.CharField(_('first name'), max_length=30, blank=True)
last_name = models.CharField(_('last name'), max_length=30, blank=True)
date_joined = models.DateTimeField(_('date joined'), auto_now_add=True)
is_active = models.BooleanField(_('active'), default=True)
avatar = models.ImageField(upload_to='avatars/', null=True, blank=True)

objects = UserManager() # <-- THIS IS YOUR CUSTOM USER MANAGER CLASS

USERNAME_FIELD = 'email' # <-- INCLUDE THIS LINE HERE!
REQUIRED_FIELDS = []

关于python - 使用自定义模型和 mongodb 进行 Django 用户身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52020493/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com