티스토리 뷰

1. BaseModel

- 클라이언트가 보낸 데이터가 기대한 형식인지 검증할 때 (숫자대신 문자열이 들어왔을 때 에러 처리) 사용

- 가독성을 높이고 유지보수를 쉽게 하기 위해서 사용

- 데이터 변환(JSON  ↔ python 객체)을 자동 처리한다.

from pydantic import BaseModel

class Item(BaseModel):
    name: str
    price: float
    description: str | None = None  # 선택적 필드

item = Item(name="Apple", price=1.2)
print(item.dict())  # {'name': 'Apple', 'price': 1.2, 'description': None}

 

2. Field

- pydantic에서 제공하는 클래스로, BaseModel의 필드에 추가 메타데이터(설명, 기본값, 유효성, 조건 등)을 설정할때 사용

from pydantic import BaseModel, Field

class Item(BaseModel):
    name: str = Field(..., title="Item Name", max_length=50)  # 필수 필드, 최대 길이 제한
    price: float = Field(..., ge=0, description="Price of the item")  # 0 이상의 값만 허용

item = Item(name="Apple", price=2.5)
print(item.dict())

 

3. HTTPException

- FastAPI에서 HTTP오류 응답을 생성하는데 사용

- API 요청에 대한 에러 처리와 적절한 상태 코드를 반환할 때 유용하다

from fastapi import FastAPI, HTTPException

app = FastAPI()

@app.get("/items/{item_id}")
async def read_item(item_id: int):
    if item_id < 0:
        raise HTTPException(status_code=400, detail="Item ID must be positive")
    return {"item_id": item_id}

 

- 주로 사용되는 에러코드

코드 분류 예시 의미
4xx 클라이언트 오류 400 잘못된 요청 : 입력데이터가 유효하지 않거나 포맷이 틀린 경우
    401 인증이 필요하거나 유효하지 않을 때
    403 클라이언트가 요청할 권한이 없을 떄
    404 요청한 리소스가 존재하지 않을 때
    405 HTTP 메서드(GET, POST 등) 가 허용되지 않을 때
    422 요청 데이터가 올바르지 않아서 처리할 수 없을 때
5xx 서버오류 500 서버에서 알 수 없는 에러가 발생했을 때
    502 게이트웨이나 프록시 서버가 잘못된 응답을 받았을 때
    503 서버가 요청을 처리할 준비가 되지 않았을 떄
    504 게이트웨이 또는 프록시 서버가 응답을 기다리다가 시간이 초과되었을 때

 

4. Depends

- 여러 경로에서 공통적으로 사용하는 로직(인증, 데이터베이스 연경 등)이 있을때 사용

- 코드의 재사용성과 가독성 향상, 함수/클래스를 통해 필요한 동작을 쉽게 주입 가능

from fastapi import FastAPI, Depends, HTTPException

app = FastAPI()

def verify_token(token: str = ""):
    if token != "secret-token":
        raise HTTPException(status_code=401, detail="Unauthorized")
    return token

@app.get("/secure/")
async def secure_route(token: str = Depends(verify_token)):
    return {"message": "Access granted", "token": token}

 

반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함