Задать вопрос
Login8
@Login8
Программист, критик, наватор

Как задать не обязательные поля в post запросах к fastAPI в python?

Здравствуйте.
Что то никак не пойму как сделать чтобы хорошо обрабатывались и такой запрос:
curl -X POST "http://127.0.0.1/reg" --data 'phone=+37423942938&accountType=111'

и такой:
curl -X POST "http://127.0.0.1/reg" --data 'accountType=111'


код сервера вот такой:
from fastapi import FastAPI, Form
from typing import Annotated
import uvicorn

fast_api = FastAPI()

@fast_api.post('/reg')
async def handler_response(phone: Annotated[str, None, Form()], accountType: Annotated[str, None, Form()]):
	print('phone', phone)
	print('accountType', accountType)
	return 'ok'

uvicorn.run(fast_api, host = '0.0.0.0', port = 80)


Возвращает ошибку
{"detail":[{"type":"missing","loc":["body","phone"],"msg":"Field required","input":null,"url":"https://errors.pydantic.dev/2.0.3/v/missing"}]}
если в запросе отсуствует поле phone.

Так же пытался так сделать
phone: Union[Annotated[str, Form()], None] = ''

тоже не вариант, ошибок не возвращает но и phone всегда пустое почему то.
Кто знает как быть?
  • Вопрос задан
  • 1371 просмотр
Подписаться 1 Простой 1 комментарий
Пригласить эксперта
Ответы на вопрос 2
@Jack444
from fastapi import FastAPI, Form
from typing import Optional
import uvicorn
from pydantic import BaseModel

fast_api = FastAPI()

class MyForm(BaseModel):
    phone: Optional[str]
    accountType: Optional[str]

@fast_api.post('/reg')
async def handler_response(data: MyForm):
  print('phone', data.phone)
  print('accountType', data.accountType)
  return 'ok'

uvicorn.run(fast_api, host = '0.0.0.0', port = 80)
Ответ написан
@BEEugene
Можно вот так попробовать.

@router.post("/upload")
async def upload_contents(
    an_int: Annotated[int, Form()],
    some_files: Annotated[List[UploadFile], File()],
    a_string: Union[str, None] = Form(default=None) # необязательное  поле
):
    return True


Взято отсюда.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
03 янв. 2025, в 10:40
2000 руб./за проект
03 янв. 2025, в 10:37
500000 руб./за проект
03 янв. 2025, в 10:35
45000 руб./за проект