반응형
다수의 파라미터를 사용하려면 아래와 같이 BaseModel을 상속받아 만들면 됩니다.
Django의 forms와 비슷하다고 생각이 듭니다.
해당 코드는 테스트를 위한 코드이기때문에 한 페이지에 표시 되었지만,
구조를 정해서 해당 구조에 맞게 관리하는것이 유지보수를 높일 수 있는 방법이지 않을까 합니다.
from typing import Union
from fastapi import Body, FastAPI
from pydantic import BaseModel
app = FastAPI()
class Item(BaseModel):
name: str
description: Union[str, None] = None
price: float
tax: Union[float, None] = None
class User(BaseModel):
username: str
full_name: Union[str, None] = None
@app.put("/items/{item_id}")
async def update_item(
*,
item_id: int,
item: Item,
user: User,
importance: int = Body(gt=0),
q: Union[str, None] = None
):
results = {"item_id": item_id, "item": item, "user": user, "importance": importance}
if q:
results.update({"q": q})
return results
필드를 사용하여 데이터 검증과 메타데이터, 옵션등을 설정할 수 있습니다.
price: float = Field(gt=0, description="The price must be greater than zero")
Nested Models
작업을 진행 하다보면 리스트 데이터를 받아야하는 경우가 상당히 많습니다.
아마 기존에는 아래와 같은 방식을 생각했을것 같습니다.
class Item(BaseModel):
tags: list = []
이제는 typing 을 import 하여 데이터 형식 삽입까지 설정 할 수 있습니다
from typing import List
class Item(BaseModel):
tags: List[str] = []
# 3.9 and above
# my_list: list[str]
이렇게 설정하게 되면 리스트 검증과 데이터의 str 검증까지 할 수 있게 됩니다.
Nested Models 역시 submodel을 호출하여 사용할 수 있습니다.
class Image(BaseModel):
url: str
name: str
class Item(BaseModel):
name: str
images: Union[List[Image], None] = None
그리고 더욱 복잡한 Nested Models 도 아래와 같이 생성할 수 있습니다.
class Image(BaseModel):
url: HttpUrl
name: str
class Item(BaseModel):
name: str
description: Union[str, None] = None
images: Union[List[Image], None] = None
class Offer(BaseModel):
name: str
description: Union[str, None] = None
price: float
items: List[Item]
추가 데이터 타입은 pydanic에서 확인하실 수 있습니다
UUID:
datetime.datetime:
datetime.date:
datetime.time:
datetime.timedelta:
frozenset:
bytes:
Decimal:
반응형
'Fastapi' 카테고리의 다른 글
FastAPI 자습서 스터디 기록 (Response Model) (0) | 2022.06.14 |
---|---|
FastAPI 자습서 스터디 기록 (Header Parameters) (0) | 2022.06.12 |
FastAPI 자습서 스터디 기록 (Query Parameters and String and numeric Validations, ) (0) | 2022.06.12 |
FastAPI 자습서 스터디 기록 (Request Body, Pydantic) (0) | 2022.06.12 |
FastAPI 자습서 스터디 기록 (설치 및 경로 매개변수, 쿼리 매개변수) (0) | 2022.06.12 |
댓글