Аутентификация пользователя Django с пользовательской моделью и монго дБ - PullRequest
0 голосов
/ 25 августа 2018

Я не очень опытен в Django и графовых базах данных. Но мне нужно настроить аутентификацию пользователя с MongoDB в Django.

Я использую pymongo для подключения к базе данных в обход настроек Django db. Но я все еще хочу использовать аутентификацию Django. Для этого мне нужно создать пользовательскую модель, расширенную с AbstractBaseUser, создать пользовательский менеджер пользователей, расширенный с BaseUserManager, и зарегистрировать AUTH_USER_MODEL в настройках.

Я также создал и зарегистрировал пользовательский бэкэнд, который возвращает мой пользовательский User объект.

Но проблема в том, что Django пытается проверить мою модель User, используя свою базу данных (sqlite в настройках), и не может найти USERNAME_FIELD (потому что на самом деле я не использую эту базу данных. не знаю, как сказать Джанго, что ему не нужно заботиться об этом.

Можете ли вы дать какие-либо предложения, пожалуйста?

Ответы [ 2 ]

0 голосов
/ 25 августа 2018

Вот сообщение , где я ответил на аналогичный вопрос.Если вы перейдете к пользовательскому классу, вы USERNAME_FIELD = 'email' установите его на то, что вы хотите использовать в качестве поля имени пользователя.Если вы не собираетесь использовать sqlite и вам не нужны данные, удалите этот файл.

Если вы не настроили свои настройки для использования mongodb, тогда использование djongo - хороший выбор.просто pip install djongo, а затем добавьте

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

в файл settings.py.Вот учебник о Джонго

0 голосов
/ 25 августа 2018

Похоже, вы должны указать 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 = []
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...