简体   繁体   中英

Case sensitves django

I tried to put this code to deactivate the sensitivity of the characters when logging in, but it does not work. What is the problem with it? It still appears to me. Please consider the sensitivity of the characters

I want to use this method. I do not want to use the backend method Please help me find the problem

class CustomUserManager(UserManager):
    def get_by_natural_key(self, username):
        return self.get(username__iexact=username)

class User(AbstractBaseUser):
    """
    Decapolis main User model
    """
    username = models.CharField(max_length=40, unique=True)
    email = models.CharField(max_length=40, unique=True)

    first_name = models.CharField(_('first name'), max_length=30, blank=True)
    last_name = models.CharField(_('last name'), max_length=30, blank=True)

    is_active = models.BooleanField(default=True)
    is_staff = models.BooleanField(default=False)
    is_superuser = models.BooleanField(default=False)

    company = models.ForeignKey(settings.COMPANY_MODEL, on_delete=models.CASCADE, related_name='user_company',
                                null=True, blank=True)
    roles = models.ManyToManyField(Role, blank=True)

    objects = CustomUserManager()

    USERNAME_FIELD = 'username'
    REQUIRED_FIELDS = ['email']
     def has_role(self, role_name):
        """
        Check user has role

        :param role_name: role name to check
        :type role_name: str
        :return: True or False
        :rtype: bool

        """
        return True if role_name in self.roles else False

    def has_perm(self, perm, obj=None):
        """
        Does the user have a specific permission?

        Not implemented yet

        :param perm: permission to check
        :type perm: str
        :param obj: object to check
        :type obj:
        :return:
        :rtype:

        """
        # Simplest possible answer: Yes, always
        return True

    def has_module_perms(self, app_label):
        """
        Does the user have permissions to view the app `app_label`?

        Not implemented yet

        :param app_label:
        :type app_label:
        :return:
        :rtype:
        """

        # Simplest possible answer: Yes, always
        return True

    def get_full_name(self):
        """
        Returns the first_name plus the last_name, with a space in between.
        """
        full_name = '%s %s' % (self.first_name, self.last_name)
        return full_name.strip()

    def __str__(self):
        return self.username



Use validator like this
    def validate_caseinsensitive(value):
        if User.objects.filter(code__iexact=value).exists():
            raise ValidationError('This User already exists.')
        return value

#in models.py

class User(BaseUser):
    code = models.CharField(max_length=10, unique=True, validators=[validate_caseinsensitive])
    # ... other code ...
    def save(self, *args, **kwargs):
        self.code = self.code.upper()
        super(User, self).save(*args, **kwargs)
    # ... other code ...

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM