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 всегда пустое почему то.
Кто знает как быть?
  • Вопрос задан
  • 748 просмотров
Пригласить эксперта
Ответы на вопрос 1
@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)
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы