Вот мой код 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))






Похоже, ваш маршрут ожидает тип объекта 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]):
Надеюсь, это полезно.