我对 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/