개발로 자기계발
article thumbnail
Published 2023. 1. 17. 22:17
FastAPI Prefix 라우팅 - 66 Develop/FastAPI
728x90
Authentication Routing  Todo Routing Prefix Routing /  External Routing /  Dependencies Routing

 

1. 라우팅 역할

  • 애플리케이션의 구조를 위한 유연한 도구
  • 확장 가능 한 아키텍처를 지원
  • 파일 구조화를 도움

 

2. 구성할 프로젝트 구조

TodoApp
main.py

database.py

models.py
TodoApp/routers TodoApp/company
auth.py todos.py companyapis.py dependencies.py

Prefix 라우팅

현재 디렉토리 구조

 

auth.py 파일 수정

#router = APIRouter()

router = APIRouter(
    prefix="/auth",
    tags=["auth"],
    responses={401: {"user": "Not authorized"}}
)

prefix: auth.py안의 API의 모든 path는 /auth로 시작하게 된다.

tags: auth.py의 라우터는 auth라는 태그를 가진다.

 

todos.py 파일 수정

#router = APIRouter() 기존 값
router = APIRouter(
    prefix="/todos",
    tags=['todos'],
    responses={404: {"description": "Not found"}}
)


#@router.get("/todos/user") 기존 값
@router.get("/user")
async def read_all_by_user(user: dict = Depends(get_current_user), db: Session = Depends(get_db)):
    if user is None:
        raise get_user_exception()
    return db.query(models.Todos).filter(models.Todos.owner_id == user.get("id")).all()


#@router.get("/{todo_id}") 기존 값
@router.get("/todo/{todo_id}")
async def read_todo(todo_id: int, user:dict = Depends(get_current_user), db: Session = Depends(get_db)):
    if user is None:
        raise get_user_exception()
    todo_model = db.query(models.Todos).filter(models.Todos.id == todo_id).filter(models.Todos.owner_id == user.get("id")).first()
    if todo_model is not None:
        return todo_model
    raise http_exception()

prefix: todos.py안의 API의 모든 path는 /todos로 시작하게 된다.

tags: todos.py의 라우터는 todos라는 태그를 가진다.

728x90
SMALL
profile

개발로 자기계발

@김잠봉

틀린부분이나 조언이 있다면 언제든 환영입니다:-)