Пользовательская аутентификация пользователя с использованием DRF - PullRequest
0 голосов
/ 05 апреля 2020

Хотите создать веб-RESTful API с Django. Для этого я использую Django REST Framework .

Каковы необходимые шаги для получения аутентификации с использованием пользовательской модели пользователя (подклассы AbstractBaseUser ), раскрывающей конечные точки, которые будут использоваться?

1 Ответ

0 голосов
/ 05 апреля 2020

1. Создание пользовательской модели пользователя

Документация хороша, когда дело доходит до Указание пользовательской модели пользователя .

В нашем файле models.py импорт AbstractBaseUser и BaseUserManager .

Затем создайте свой класс, например,

class Profiles(AbstractBaseUser):
    userId = models.CharField(max_length=36, unique= True)
    username = models.CharField(max_lenght=20)
    password = models.CharField(max_lenght=256)
    is_admin = models.BooleanField(default=False)
    is_staff = models.BooleanField(default=False)
    is_superuser = models.BooleanField(default=False)
    ...

Здесь очень важно установить USERNAME_FIELD и REQUIRED_FIELDS , чтобы определить, какие поля важны при входе в систему.

Также в вашем пользовательском классе модели пользователя необходимо создать две функции, необходимые для работы с разрешениями, а именно has_perm () и has_module_perms () .


2. Создание пользовательского диспетчера пользователей

Теперь следующим шагом является создание пользовательского диспетчера пользователей , что рекомендовано Django.

Поэтому мы создаем класс, подобный

class ProfilesManager(BaseUserManager):
    ...

В этом классе необходимо переопределить два метода, а именно create_user () и create_superuser () , чтобы определить, что происходит при создании пользователя и когда создается суперпользователь, соответственно.

Затем нам нужно сообщить классу Profiles с параметром объектов, где этот класс ProfilesManager равен.

class Profiles(AbstractBaseUser):
    userId = models.CharField(max_length=36, unique= True)
    email = models.CharField(max_lenght=20)
    password = models.CharField(max_lenght=256)
    is_admin = models.BooleanField(default=False)
    is_staff = models.BooleanField(default=False)
    is_superuser = models.BooleanField(default=False)
    ...

    USERNAME_FIELDS = 'userId'
    REQUIRED_FIELDS = ['email']

    objects = ProfilesManager()

    def has_perm(self, perm, obj=None):
        return self.is_admin

    def has_module_perms(self, app_label):
        return True

3. Задайте пользовательскую модель

Go в файле settings.py и добавьте свойство AUTH_USER_MODEL , указав, какую пользовательскую модель Django следует использовать.

AUTH_USER_MODEL = 'appName.Profiles'

4. Выполните миграции

Чтобы зафиксировать внесенные выше изменения, нужно выполнить миграцию , запустив

python manage.py makemigrations

5. Регистрация пользователя в REST API

Поскольку мы создали модель, нам просто нужно создать сериализаторы , views и urls.

...