반응형
Extra Models의 경우 더 섬세한 입출력 검증위해 사용한다고 생각하시면 됩니다.
이때 중복도 감소하게 되어 클린한 코드를 유지할 수 있습니다..
흔히 Python을 사용 해본사람은 알 수 있는 자료형들입니다.
- UUID:
- datetime.datetime:
- 파이썬의 datetime.datetime (2022-06-15T15:53:00+09:00)
- datetime.date:
- 파이썬의 datetime.date. (2022-06-15)
- datetime.time:
- 파이썬의 datetime.time. (18:20:00.123)
- datetime.timedelta:
- 파이썬의 datetime.timedelta.
- Decimal:
- 파이썬의 Decimal.
아래 코드와 같이 중복되는 것을 선언하고 상속을 받아 또 다른 model을 생설할 수 있습니다.
from typing import Union
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class BaseItem(BaseModel):
description: str
type: str
class CarItem(BaseItem):
type = "car"
class PlaneItem(BaseItem):
type = "plane"
size: int
items = {
"item1": {"description": "All my friends drive a low rider", "type": "car"},
"item2": {
"description": "Music is my aeroplane, it's my aeroplane",
"type": "plane",
"size": 5,
},
}
@app.get("/items/{item_id}", response_model=Union[PlaneItem, CarItem])
async def read_item(item_id: str):
return items[item_id]
각각 Response body를 보면 어떻게 동작하는지 명확하게 알 수 있습니다.
# items/item1
{
"description": "All my friends drive a low rider",
"type": "car"
}
# items/item2
{
"description": "Music is my aeroplane, it's my aeroplane",
"type": "plane",
"size": 5
}
그렇다면 type 필드를 제외하거나 모델에 type에 정의되지 않은 값을 넣으면 어떻게 보여질까요?
items = {
#"item1": {"description": "All my friends drive a low rider", "type": "car"},
#"item2": {
# "description": "Music is my aeroplane, it's my aeroplane",
# "type": "plane",
# "size": 5,
#},
"item3": {
"description": "Music is my aeroplane, it's my aeroplane",
"size": 5,
},
"item4": {
"description": "Music is my aeroplane, it's my aeroplane",
},
"item5": {
"description": "Music is my aeroplane, it's my aeroplane",
"type": "empty type",
}
}
각각 호출하였을때 Response Body 값입니다.
# /items/item3
{
"description": "Music is my aeroplane, it's my aeroplane",
"type": "plane",
"size": 5
}
# /items/item4
{
"description": "Music is my aeroplane, it's my aeroplane",
"type": "car"
}
# /items/item5
{
"description": "Music is my aeroplane, it's my aeroplane",
"type": "empty type"
}
item5의 경우 예상을 한대로 str을 전달받아 노출이 되었습니다.
type이 지정되지 않은 item4의 경우 default로 정의된 car가 들어갔습니다.
item3의 경우 size가 포함되어있으니 plane으로 호출된것을 확인 할 수 있습니다.
반응형
'Fastapi' 카테고리의 다른 글
FastAPI 자습서 스터디 기록 (Response Model) (0) | 2022.06.14 |
---|---|
FastAPI 자습서 스터디 기록 (Header Parameters) (0) | 2022.06.12 |
FastAPI 자습서 스터디 기록 (Multiple Parameters, Nested Models) (0) | 2022.06.12 |
FastAPI 자습서 스터디 기록 (Query Parameters and String and numeric Validations, ) (0) | 2022.06.12 |
FastAPI 자습서 스터디 기록 (Request Body, Pydantic) (0) | 2022.06.12 |
댓글