code: def get_client_username(request: AxesHttpRequest, credentials: dict = None) -> str:
      
  
      if settings.AXES_USERNAME_CALLABLE:
          log.debug('Using settings.AXES_USERNAME_CALLABLE to get username')
  
          if callable(settings.AXES_USERNAME_CALLABLE):
              return settings.AXES_USERNAME_CALLABLE(request, credentials)
          if isinstance(settings.AXES_USERNAME_CALLABLE, str):
              return import_string(settings.AXES_USERNAME_CALLABLE)(request, credentials)
          raise TypeError('settings.AXES_USERNAME_CALLABLE needs to be a string, callable, or None.')
  
      if credentials:
          log.debug('Using parameter credentials to get username with key settings.AXES_USERNAME_FORM_FIELD')
          return credentials.get(settings.AXES_USERNAME_FORM_FIELD, None)
  
      log.debug('Using parameter request.POST to get username with key settings.AXES_USERNAME_FORM_FIELD')
      return request.POST.get(settings.AXES_USERNAME_FORM_FIELD, None)
docs: Resolve client username from the given request or credentials if supplied.
  
      The order of preference for fetching the username is as follows:
  
      1. If configured, use ``AXES_USERNAME_CALLABLE``, and supply ``request, credentials`` as arguments
      2. If given, use ``credentials`` and fetch username from ``AXES_USERNAME_FORM_FIELD`` (defaults to ``username``)
      3. Use request.POST and fetch username from ``AXES_USERNAME_FORM_FIELD`` (defaults to ``username``)
  
      :param request: incoming Django ``HttpRequest`` or similar object from authentication backend or other source
      :param credentials: incoming credentials ``dict`` or similar object from authentication backend or other source