반응형
FastAPI, 게시판 페이지네이션(pagination)/페이징 처리 예제
글. 수알치 오상문
from fastapi import FastAPI
from typing import List
app = FastAPI()
# 99개 게시물 데이터 생성
posts = []
for i in range(1, 100):
posts.append({"id": i, "title": f"Post {i}", "content": f"This is post {i}"})
@app.get("/posts/{post_id}")
async def get_post(post_id: int):
try:
post = posts[post_id - 1]
post['status'] = "OK"
return post
except Exception as e:
print("Error: /posts/{post_id} :", e)
return {"status": "ERROR",}
@app.get("/posts")
async def get_posts(skip: int = 0, limit: int = 10):
if len(posts) <= skip or skip < 0 or limit < 1:
print("Error: /posts : Page not found")
return {"status": "ERROR",}
try:
return {
"status": "OK",
"data": posts[skip : skip+limit],
"page": skip//limit+1, # 현재 페이지 번호 (1부터 시작)
"per_page": limit, # 페이지당 최대 게시물 개수
"total": len(posts), # 전체 게시물 개수
"total_pages": (len(posts)-1)//limit+1, # 현재 페이지 게시물 개수
}
except Exception as e:
print("Error: /posts :,", e)
return {"status": "ERROR",}
'''
HTML에서 API 호출하는 예
<a href="/posts?skip=0&limit=10">Page 1</a>
<a href="/posts?skip=10&limit=10">Page 2</a>
<a href="/posts?skip=20&limit=10">Page 3</a>
'''
# Test -----------------
def get_posts_test(skip: int = 0, limit: int = 10):
if len(posts) <= skip or skip < 0 or limit < 1:
print("Error: /posts : Page not found")
return {"status": "ERROR",}
try:
return {
"status": "OK",
"data": posts[skip : skip+limit],
"page": skip // limit+1, # 현재 페이지 번호 (1부터 시작)
"per_page": limit, # 페이지당 최대 게시물 개수
"total": len(posts), # 전체 게시물 개수
"total_pages": (len(posts)-1)//limit+1, # 현재 페이지의 게시물 개수
}
except Exception as e:
print("Error: /posts :,", e)
return {"status": "ERROR",}
page = 2 # 2 페이지 (1부터 시작)
limit = 10 # 페이지당 게시물 개수
skip = 10*(page-1) # 페이지에 맞는 게시물 시작 위치
# 페이지에 해당하는 게시물 정보를 가져오는지 테스트
ret = get_posts_test(skip=skip, limit=limit)
if ret.get('status', "ERROR") == "OK":
print(ret)
else:
print("Page Error")
반응형
'FastAPI' 카테고리의 다른 글
FastAPI, 파일 업로드와 다운로드 API 예제 (0) | 2023.08.12 |
---|---|
FastAPI, 호출할 때마다 응답이 변한다? (0) | 2023.08.11 |
dJango + FastAPI 연동 (0) | 2023.03.13 |
Fastapi 설정 관리 (0) | 2023.02.10 |
FastAPI 프로그래밍, dinGrr blog (0) | 2022.07.02 |