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

标签 python django mongodb

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

相关文章:

django - 如何获取模板中的URL名称?

python - 记录未显示在模板中

mongodb - 如何将 $push 和 $each 与 go mgo 驱动程序一起使用?

arrays - MongoDB : find documents having 2 values in Array conforming to multiple criteria

django - 通过 Django 中的后端身份验证创建时将用户标记为新用户

javascript - Django:Jquery 单击功能在 Ajax 中不起作用

python - 尝试排除 "OSError: [Errno 13] Permission denied"错误并写入日志文件

Python AUTH0 发布请求 : Invalid request payload JSON format

json - 在 Shell 中将 MongoDB 文档转换为扩展 JSON

python - 为什么非常小的 checkinterval 不会减慢 python3 中 CPU 密集型多线程的速度?