我对Django和图形数据库没有真正的经验。但是我需要在Django中使用MongoDB设置用户身份验证。
我正在使用pymongo绕过Django db设置来连接数据库。但是我仍然想使用Django身份验证。为此,我实际上应该创建一个从AbstractBaseUser
扩展的用户模型,创建一个从BaseUserManager
扩展的自定义用户管理器,并在设置中注册AUTH_USER_MODEL
。
我还创建并注册了自定义后端,该后端返回我的自定义User
对象。
但是问题是,似乎Django尝试使用其数据库(设置中为sqlite)来验证我的User
模型,并且找不到USERNAME_FIELD
(因为实际上我没有使用此模型db。我不知道该如何告诉Django不需要关心它。
请提供任何建议吗?
答案 0 :(得分:1)
您似乎需要告诉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 = []
答案 1 :(得分:0)