          return self._create_user(username, email, password, True, True,
                                   **extra_fields)
  
  
  @python_2_unicode_compatible
  class AbstractBaseUser(models.Model):
      password = models.CharField(_('password'), max_length=128)
      last_login = models.DateTimeField(_('last login'), blank=True, null=True)
  
      is_active = True
  
      REQUIRED_FIELDS = []
  
      class Meta:
          abstract = True
  
      def get_username(self):
          "Return the identifying username for this User"
          return getattr(self, self.USERNAME_FIELD)
  
      def __str__(self):
          return self.get_username()
  
      def natural_key(self):
          return (self.get_username(),)
  
      def is_anonymous(self):
          """
          Always returns False. This is a way of comparing User objects to
          anonymous users.
          """
          return False
  
      def is_authenticated(self):
          """
          Always return True. This is a way to tell if the user has been
          authenticated in templates.
          """
          return True
  
      def set_password(self, raw_password):
          self.password = make_password(raw_password)
  
      def check_password(self, raw_password):
          """
          Returns a boolean of whether the raw_password was correct. Handles
          hashing formats behind the scenes.
          """
          def setter(raw_password):
              self.set_password(raw_password)
              self.save(update_fields=["password"])
          return check_password(raw_password, self.password, setter)
  
      def set_unusable_password(self):
          # Sets a value that will never be a valid hash
          self.password = make_password(None)
  
      def has_usable_password(self):
          return is_password_usable(self.password)
  
      def get_full_name(self):
          raise NotImplementedError('subclasses of AbstractBaseUser must provide a get_full_name() method')
  
      def get_short_name(self):
          raise NotImplementedError('subclasses of AbstractBaseUser must provide a get_short_name() method.')
  
      def get_session_auth_hash(self):
          """
          Returns an HMAC of the password field.
          """
          key_salt = "django.contrib.auth.models.AbstractBaseUser.get_session_auth_hash"
          return salted_hmac(key_salt, self.password).hexdigest()
  
  
  # A few helper functions for common logic between User and AnonymousUser.
  def _user_get_all_permissions(user, obj):
      permissions = set()
      for backend in auth.get_backends():
          if hasattr(backend, "get_all_permissions"):
 
</s> remove class BaseUserManager(models.Manager):

    @classmethod
    def normalize_email(cls, email):
        """
        Normalize the address by lowercasing the domain part of the email
        address.
        """
        email = email or ''
        try:
            email_name, domain_part = email.strip().rsplit('@', 1)
        except ValueError:
            pass
        else:
            email = '@'.join([email_name, domain_part.lower()])
        return email

    def make_random_password(self, length=10,
                             allowed_chars='abcdefghjkmnpqrstuvwxyz'
                                           'ABCDEFGHJKLMNPQRSTUVWXYZ'
                                           '23456789'):
        """
        Generates a random password with the given length and given
        allowed_chars. Note that the default value of allowed_chars does not
        have "I" or "O" or letters and digits that look similar -- just to
        avoid confusion.
        """
        return get_random_string(length, allowed_chars)

    def get_by_natural_key(self, username):
        return self.get(**{self.model.USERNAME_FIELD: username})


 </s> add  </s> remove from django.utils.crypto import get_random_string, salted_hmac
 </s> add  </s> remove from django.contrib.auth.hashers import (
    check_password, is_password_usable, make_password,
)
 </s> add from django.contrib.auth.base_user import AbstractBaseUser, BaseUserManager
          return self._create_user(username, email, password, True, True,
                                   **extra_fields)
  
  






































































  # A few helper functions for common logic between User and AnonymousUser.
  def _user_get_all_permissions(user, obj):
      permissions = set()
      for backend in auth.get_backends():
          if hasattr(backend, "get_all_permissions"):
keep keep keep keep replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace keep keep keep keep keep
 Fixed #24564 -- Moved AbstractBaseUser and BaseUserManager so they can be used without auth in INSTALLED_APPS 
django/contrib/auth/models.py