Ошибка FastAPI при обработке файла вместе с данными формы, определенными в модели PydanticPython

Программы на Python
Ответить
Anonymous
 Ошибка FastAPI при обработке файла вместе с данными формы, определенными в модели Pydantic

Сообщение Anonymous »

По какой-то причине одновременная обработка данных формы и загрузки файла вызывает ошибку.

Код: Выделить всё

from typing import Annotated

Код: Выделить всё

from pydantic import BaseModel, StringConstraints, EmailStr

Код: Выделить всё

class RouteBody(BaseModel):
email: Annotated[EmailStr, StringConstraints(
max_length = 255
)]
password: Annotated[str, StringConstraints(
max_length = 60
)]
И это гарантирует, что тело маршрутов правильное. Супер красиво.

Код: Выделить всё

from fastapi import UploadFile, File

Код: Выделить всё

@some_api_router.post("/some-route")
async def handleRoute(routeBody: RouteBody = Form(), profilePicture: UploadFile = File(...)):
return {"msg": "Route"}
И я тестирую это с помощью документации SwaggerUI:
[img]https://i. sstatic.net/VC7Fugzt.png[/img]

Я получаю следующую ошибку:

Код: Выделить всё

error [{'type': 'model_attributes_type', 'loc': ('body', 'routeBody'), 'msg': 'Input should be a valid dictionary or object to extract fields from', 'input': '{"email":"user@example.com","password":"string"}'}]
[*]Проверил на отдельном маршруте без «RouteBody», и все работало отлично.
[*] Переписал обработчик маршрута с нуля.
[*]Изменил порядок параметров (не знаю, почему я подумал, что это важно... может быть, так и было?)
[*]Вместо использования типа модели Pydantic для RouteBody я выбрал отдельные параметры, чтобы сделать его функциональным. Однако это не идеальное решение, так как требует перечисления всех параметров, если их много.
[*]Обратился за помощью к ChatGPT


Подробнее здесь: https://stackoverflow.com/questions/790 ... pydantic-m
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»