본문 바로가기
Fastapi

FastAPI 자습서 스터디 기록 (Request Body, Pydantic)

by Django_ 2022. 6. 12.
반응형

 

데이터를 주고 받을때는 데이터가 올바른지 검증하는것이 중요합니다.

 

설치 및 매개변수에 대해 이전에 알아봤는데요~

 

FastAPI 자습서 스터디 기록 (설치 및 경로 매개변수, 쿼리 매개변수)

최초 설치 # 의존성 패키지까지 설치 pip install fastapi[all] uvicorn main:app --reload FastAPI는 docs (Swagger)와 redoc을 제공합니다. # path, 경로라고 합니다. # domain.com/ 뒤로 https://example.com/..

install-django.tistory.com

이번 포스팅은 Pydantic's BaseModel 사용에 관한 포스팅입니다.

데이터 검증을 위해서는 데이터 형식을 사전에 정의해두는 것이 중요합니다.

이때 BaseModel을 상속받아  정의하게 됩니다.

from typing import Union

from fastapi import FastAPI
from pydantic import BaseModel


class Item(BaseModel):
    name: str
    description: Union[str, None] = None
    price: float
    tax: Union[float, None] = None


app = FastAPI()


@app.post("/items/")
async def create_item(item: Item):
    return item

 

# 모든 데이터 전달

{
    "name": "Foo",
    "description": "An optional description",
    "price": 45.2,
    "tax": 3.5
}


# 필수값만 전달
{
    "name": "Foo",
    "price": 45.2
}

이때 데이터를 전달받는 방식은 POST 메소드입니다.

해당 BaseModel을 통해 구현된것을 docs에서 확인을해보면

자동으로 API 문서가 작성된것을 확인 할 수 있습니다.

데이터를 조합하여 새로운 값을 생성할 수 도 있습니다.

......


@app.post("/items/")
async def create_item(item: Item):
    item_dict = item.dict()
    if item.tax:
        price_with_tax = item.price + item.tax 
        item_dict.update({"price_with_tax": price_with_tax})
    return item_dict

리퀘스트 바디 + 패스 + 쿼리 파라미터를 선언할 수 있습니다.

# Request body + path + query parameters
@app.put("/items/{item_id}")
async def create_item(item_id: int, item: Item, q: Union[str, None] = None):
    result = {"item_id": item_id, **item.dict()}
    if q:
        result.update({"q": q})
    return result

이렇게 Pydantic의 도움으로 손쉽게 데이터에 대한 검증을 할 수 있게 되었습니다.

Pydantic이 없이도 사용 가능 하겠지만 데이터 검증은 반드시 필요하며 패키지를 확인하고 사용할 수 있도록 습관을 가지도록 합니다.

(검증 되었고 관리되고 있는 패키지를 뛰어 넘는 무언가를 직접 만드는것은 영역이 다르다고 생각하는 편이 마음이 편할 수 있습니다.) 

반응형

댓글