[FastAPI] Pagination with fastapi-pagination

Jin·2024년 5월 14일
1
post-thumbnail

환경
Python 3.11
fastapi 0.110.2
fastapi-pagination 0.12.24
MongoDB

이전에 스프링부트에서 Pageable을 사용하여 myBatis와 함께 간단하게 페이지네이션 하는 법에 대해서 알아보았다.

어쩌다보니 fastAPI를 사용하게 되었는데
Django... 이제 못쓰겠음😒

이번에는 FastAPI에서 간단하게 사용하는 방법에 대해서 정리하려고 한다.

스프링부트에서보다 훨씬 쉽다.

이미 MVC가 구현 다 되었다는 전제하에 시작한다.

✨설치하기

pip install fastapi-pagination

✨main.py

from fastapi import FastAPI
from fastapi_pagination import add_pagination

app = FastAPI()
add_pagination(app)

✨controller.py

from fastapi import Depends
from fastapi_pagination import Page, Params, paginate

@post_router.get("/posts", response_model=Page[Post])
async def get_posts(params: Params = Depends()):
    params.size = 5
    return paginate(list(get_post_from_db()),params)

보내고 싶은 요소들을 list로 묶어 보내야 하고, 하나당 사이즈를 조절하고 싶으면 Param의 size에 대해서 크기를 지정해 주면 된다. 디폴트는 50이다.

더 알아보고 싶다면 Params 클래스와 Page 클래스에 대해 더 알아보면 될 것이다.

✨service.py (변경사항 없음)

def get_post_from_db():
    posts = db.posts.find()
    return posts

✨models.py (변경사항 없음)

그냥 우리가 아는 model이다👀

✨어떻게 뜨는가

http://localhost:8000/post/posts?page=2
{
    "items": [
        {
            "id": 6,
            "title": "새 포스트 제목22",
            "content": "여기에 내용을322 입력하세요.",
            "nickname": "작성자 이름",
            "password": "1234",
            "comments": [],
            "date": "2024-05-13T22:52:08.062000"
        }
    ],
    "total": 6,
    "page": 2,
    "size": 5,
    "pages": 2
}

2 페이지에 대해서 찾아봤고, 잘 찾아진다.

✨참고자료

레퍼런스
참고자료

profile
go-getter

0개의 댓글