  
  NOT_PROVIDED = object()  # RemovedInDjango40Warning.
  
  
  # RemovedInDjango40Warning: when the deprecation ends, replace with:
  #   def get_random_string(length, allowed_chars=RANDOM_STRING_CHARS):
  def get_random_string(length=NOT_PROVIDED, allowed_chars=RANDOM_STRING_CHARS):
 
</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) </s> remove     constant_time_compare, get_random_string, pbkdf2,
 </s> add     RANDOM_STRING_CHARS, constant_time_compare, get_random_string, pbkdf2,
RANDOM_STRING_CHARS = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'
  
  NOT_PROVIDED = object()  # RemovedInDjango40Warning.
RANDOM_STRING_CHARS = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'
  
  
  # RemovedInDjango40Warning: when the deprecation ends, replace with:
  #   def get_random_string(length, allowed_chars=RANDOM_STRING_CHARS):
  def get_random_string(length=NOT_PROVIDED, allowed_chars=RANDOM_STRING_CHARS):
keep add keep keep keep keep keep
 Refs #31358 -- Added constant for get_random_string()'s default alphabet. 
django/utils/crypto.py