Как отправить массив на бэкэнд с помощью React и FastAPI. Я продолжаю получать код ошибки 422

Вот мой код React. Я анализирую CSV, который загружаю в fileData. Я просто пытаюсь распечатать данные в консоли в своем Backend. CSV, вероятно, содержит около 350 строк.

const [fileData, setFileData] = useState([])

const changeHandler = (event) => {
        Papa.parse(event.target.files[0], {
            header: true,
            skipEmptyLines: true,
            complete: function (results) {
                setFileData(results.data)
            },
          });
      };

async function postData() {
        try{
          console.info('File Data:', fileData)
          const response = await axios.post(`${API_KEY}/uploadPlayerMins`, fileData)
          console.info(response.data)
        }
        catch (error) {
          console.error(error)
        }
      }

Вот код Python.

class PlayerInfo(BaseModel):
    Mins: str
    Player: str

@router.post("/uploadPlayerMins")
async def create_upload_file(player: PlayerInfo):
    try:
        print(player)
        return JSONResponse(status_code=status.HTTP_200_OK, content=jsonable_encoder({ 'status': 'success',
                                'status_code': 200, 
                                  "message":  'Data has been uploaded successfully.'}))
    except Exception as e:
        raise HTTPException(status_code=500, detail=str(e))

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
56
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Похоже, ваш маршрут ожидает тип объекта PlayerInfo:

async def create_upload_file(player: PlayerInfo)

но вы пытаетесь отправить массив. Возможно, вы могли бы изменить тип ожидаемого значения. вместо PlayerInfo используйте dict

async def create_upload_file(player: Dict)

Ответ принят как подходящий

Код ошибки 422 означает, что интерфейс тела, определенный в бэкэнде (python), отличается в теле, в котором бэкэнд получен из внешнего интерфейса (реагировать).

В вашем случае интерфейс тела в серверной части — PlayerInfo. Таким образом, тело запроса должно представлять собой такой словарь:

{
 'Mins': ' ',
 'Player': ' ',
}

Но ваш запрос на отправку интерфейса с телом представляет собой массив PlayerInfo.

Чтобы исправить ошибку 422, вы можете изменить свой код на Python.

async def create_upload_file(player: List[PlayerInfo]):

Надеюсь, это полезно.

Другие вопросы по теме