  from django.core.exceptions import ImproperlyConfigured
  from django.core.signals import setting_changed
  from django.dispatch import receiver
  from django.utils.crypto import (
      constant_time_compare, get_random_string, pbkdf2,
  )
  from django.utils.module_loading import import_string
  from django.utils.translation import gettext_noop as _
  
  UNUSABLE_PASSWORD_PREFIX = '!'  # This will never be a valid encoded hash
 
</s> remove #   def get_random_string(length, allowed_chars='...'):
def get_random_string(length=NOT_PROVIDED, allowed_chars=(
    'abcdefghijklmnopqrstuvwxyz'
    'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'
)):
 </s> add #   def get_random_string(length, allowed_chars=RANDOM_STRING_CHARS):
def get_random_string(length=NOT_PROVIDED, allowed_chars=RANDOM_STRING_CHARS): </s> remove         # 12 returns a 71-bit value, log_2((26+26+10)^12) =~ 71 bits
        return get_random_string(12)
 </s> add         # 12 returns a 71-bit value, log_2(len(RANDOM_STRING_CHARS)^12) =~ 71 bits
        return get_random_string(12, RANDOM_STRING_CHARS)
    RANDOM_STRING_CHARS, constant_time_compare, get_random_string, pbkdf2,
  from django.core.exceptions import ImproperlyConfigured
  from django.core.signals import setting_changed
  from django.dispatch import receiver
  from django.utils.crypto import (
    RANDOM_STRING_CHARS, constant_time_compare, get_random_string, pbkdf2,
  )
  from django.utils.module_loading import import_string
  from django.utils.translation import gettext_noop as _
  
  UNUSABLE_PASSWORD_PREFIX = '!'  # This will never be a valid encoded hash
keep keep keep keep replace keep keep keep keep keep
 Refs #31358 -- Added constant for get_random_string()'s default alphabet. 
django/contrib/auth/hashers.py