Как сделать имя пользователя нечувствительным к регистру в Dnago? Правильно ли мое выполнение? - PullRequest
0 голосов
/ 01 октября 2019

Я начинаю свой веб-проект с использованием Django и Django Rest Framework. Я хотел, чтобы в моем поле имени пользователя не учитывался регистр, и поэтому я искал в Интернете информацию о том, как этого добиться, и попал в этот прекрасный блог: https://simpleisbetterthancomplex.com/tutorial/2017/02/06/how-to-implement-case-insensitive-username.html. Он предложил этот метод:

from django.contrib.auth.models import AbstractUser, UserManager

class CustomUserManager(UserManager):
    def get_by_natural_key(self, username):
        case_insensitive_username_field = '{}__iexact'.format(self.model.USERNAME_FIELD)
        return self.get(**{case_insensitive_username_field: username})

class CustomUser(AbstractUser):
    objects = CustomUserManager()

для models.py

Но когда я писал тесты, они терпели неудачу, потому что User.objects.get_by_natural_key возвращал два пользовательских объекта, когда я создал двух пользователей с одинаковым именем пользователя, но с разным регистром (например, «aniket» и «Aniket»).

Итак, я прошел через этот подход:

from django.contrib.auth.models import UserManager, AbstractUser
# Create your models here.


class CustomUserManager(UserManager):
    def create_user(self, username, email=None, password=None, **extra_fields):
        return super().create_user(username.lower(),email,password,**extra_fields)

    def create_superuser(self, username, email, password, **extra_fields):
        return super().create_superuser(username.lower(),email,password,**extra_fields)

    def get_by_natural_key(self, username):
        case_insensitive_username_field = '{}__iexact'.format(self.model.USERNAME_FIELD)
        return self.get(**{case_insensitive_username_field: username})

class User(AbstractUser):
    objects = CustomUserManager()

Итак, этот подход на должном уровне?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...