환경
Python 3.11
fastapi 0.110.2
fastapi-pagination 0.12.24
MongoDB
이전에 스프링부트에서 Pageable을 사용하여 myBatis와 함께 간단하게 페이지네이션 하는 법에 대해서 알아보았다.
어쩌다보니 fastAPI를 사용하게 되었는데
Django... 이제 못쓰겠음😒
이번에는 FastAPI에서 간단하게 사용하는 방법에 대해서 정리하려고 한다.
스프링부트에서보다 훨씬 쉽다.
이미 MVC가 구현 다 되었다는 전제하에 시작한다.
pip install fastapi-pagination
from fastapi import FastAPI
from fastapi_pagination import add_pagination
app = FastAPI()
add_pagination(app)
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 클래스에 대해 더 알아보면 될 것이다.
def get_post_from_db():
posts = db.posts.find()
return posts
그냥 우리가 아는 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 페이지에 대해서 찾아봤고, 잘 찾아진다.