FastAPI-CRUD

2025. 5. 16. 16:57·Python

FastAPI 이벤트 CRUD 예제


# routes/events.py
from typing import List
from fastapi import APIRouter, Body, HTTPException, Path, status
from models.events import Event, UpdateEvent

event_router = APIRouter(tags=["Event"])

events = []


# 이벤트 전체 조회  /events/
@event_router.get("/", response_model=List[Event])
async def retrive_all_events() -> List[Event]:
    return events


# 이벤트 상세 조회  /events/{event_id}
@event_router.get("/{event_id}", response_model=Event)
async def retrive_event(event_id: int) -> Event:
    for event in events:
        if event.id == event_id:
            return event
    raise HTTPException(
        status_code=status.HTTP_404_NOT_FOUND,
        detail="일치하는 이벤트를 찾을 수 없습니다."
    )


# 이벤트 등록  /events/
@event_router.post("/")
async def create_event(data: Event = Body(...)) -> dict:
    for event in events:
        if event.id == data.id:
            raise HTTPException(
                status_code=status.HTTP_409_CONFLICT,
                detail="동일한 이벤트가 존재합니다."
            )
    events.append(data)
    return {"message": "이벤트 등록이 완료되었습니다."}


# 이벤트 하나 삭제  /events/{event_id}
@event_router.delete("/{event_id}")
async def delete_event(event_id: int) -> dict:
    for event in events:
        if event.id == event_id:
            events.remove(event)
            return {"message": "이벤트 삭제가 완료되었습니다."}
    raise HTTPException(
        status_code=status.HTTP_404_NOT_FOUND,
        detail="일치하는 이벤트를 찾을 수 없습니다."
    )


# 이벤트 전체 삭제  /events/
@event_router.delete("/")
async def delete_all_events() -> dict:
    events.clear()
    return {"message": "이벤트 전체 삭제가 완료되었습니다."}


# 이벤트 수정  /events/{event_id}
@event_router.put("/{event_id}", response_model=Event)
async def update_event(event_id: int = Path(...), data: UpdateEvent) -> dict:
    for event in events:
        if event.id == event_id:
            event.title = data.title
            event.image = data.image
            event.description = data.description
            event.tags = data.tags
            event.location = data.location
            return {"message": "이벤트 수정이 완료되었습니다."}
    raise HTTPException(
        status_code=status.HTTP_404_NOT_FOUND,
        detail="일치하는 이벤트를 찾을 수 없습니다."
    )


# models/events.py
from typing import List, Optional
from pydantic import BaseModel

class Event(BaseModel):
    id: int
    title: str
    image: str
    description: str
    tags: List[str]
    location: str

class UpdateEvent(BaseModel):
    title: Optional[str] = None
    image: Optional[str] = None
    description: Optional[str] = None
    tags: Optional[List[str]] = None
    location: Optional[str] = None

이벤트 수정 포인트 정리

  • FastAPI 함수 정의 시 매개변수 순서 주의
  • Path(...)는 URL 경로에서 값을 추출하는 데 사용되며, 요청 시 반드시 포함되어야 하는 필수값으로 처리됨
  • Body(...)는 요청 본문(JSON)에서 데이터를 추출하는 데 사용되며, 필수 입력값으로 간주됨
  • 함수 정의 시 Body 인자는 기본값이 없는 인자이므로, Path보다 앞쪽에 선언해야 오류 없음
  • 수정 함수의 올바른 선언 순서 예시: async def update_event(data: UpdateEvent, event_id: int = Path(...))
  • Optional[str] 또는 Optional[List[str]]은 해당 필드가 선택 입력 가능하며, 생략되면 None으로 처리됨
  • 전달되지 않은 값(None)으로 전체 필드가 덮어씌워지는 문제 → None 여부를 확인한 후 개별 할당 필요

'Python' 카테고리의 다른 글

FastAPI에서 JWT 토큰을 이용한 로그인 인증 구현  (0) 2025.05.21
FastAPI + React로 회원관리 시스템 구축 (MySQL 연동)  (0) 2025.05.21
React와 Python 연결  (0) 2025.05.20
FastAPI-DB연결  (0) 2025.05.18
Path, Query, Response_model  (0) 2025.05.15
FastAPI 백엔드 개발 환경 세팅 & 기본 API 구현 정리  (0) 2025.05.14
'Python' 카테고리의 다른 글
  • React와 Python 연결
  • FastAPI-DB연결
  • Path, Query, Response_model
  • FastAPI 백엔드 개발 환경 세팅 & 기본 API 구현 정리
jaeon.cloud
jaeon.cloud
  • jaeon.cloud
    JEONG JAE ON
    jaeon.cloud
  • 전체
    오늘
    어제
    • 분류 전체보기 (60)
      • Docker (8)
      • Cloud (7)
      • AWS (14)
      • Network (9)
      • Linux (1)
      • Python (7)
      • Javascript (3)
      • React (5)
      • Project (3)
      • Kubernetes (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • GitHub
  • 공지사항

  • 인기 글

  • 태그

    클라우드
    네트워크
    kubernetes
    http
    3-tier Architecture
    cors
    lambda
    docker
    react
    Python
    AWS
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
jaeon.cloud
FastAPI-CRUD
상단으로

티스토리툴바