728x90
rating이 없는 dict 값 반환이 목표
1. 새로운 BaseModel 생성
class BookNoRating(BaseModel):
id: UUID
title: str = Field(min_length=1)
author: str
description: Optional[str] = Field(
None,
title='Description of the Book',
max_length=100,
min_length=1
)
2. 새로운 함수 생성(response_model 정의)
@app.get("/book/rating/{book_id}", response_model=BookNoRating)
async def read_book_no_rating(book_id:UUID):
for x in BOOKS:
if x.id == book_id:
return x
raise raise_item_cannot_he_found_exception()
- BOOKS list안에 book_id와 같은 UUID가 있으면 x 값 return
- BOOKS list안의 dict는 rating을 포함하고 있지만 response_model을 BookNoRating으로 정의했기 때문에 rating이 제외된 결과를 얻을 수 있게 되었음.
- 없다면 사전에 정의한 에러 함수 return
response_model 장점
1. output 데이터를 선언한 타입에 맞게 컨버팅
2. 데이터 유효성 검사
3. JSON 직렬화
4. automatic documenting
5. 모델의 결과 데이터를 제한
3. 종합 정리
- BOOKS list 안의 dict 구조(Book BaseModel을 바라보고 있음)
BOOKS = []
book_1 = Book(id="db6d5c1f-0460-4bab-8aa1-a801bf843273",
title="Title 1",
author="Author 1",
description="Description 1",
rating=75)
- BaseModel 차이
class Book(BaseModel):
id: UUID
title: str = Field(min_length=1)
author: str = Field(min_length=1, max_length=100)
description: Optional[str] = Field(title="Description of the book",
max_length=100,
min_length=1)
rating: int = Field(gt=-1, lt=101)
class BookNoRating(BaseModel):
id: UUID
title: str = Field(min_length=1)
author: str
description: Optional[str] = Field(
None,
title='Description of the Book',
max_length=100,
min_length=1
)
- 함수 차이
@app.get("/book/{book_id}")
async def read_book(book_id:UUID):
for x in BOOKS:
if x.id == book_id:
return x
@app.get("/book/rating/{book_id}", response_model=BookNoRating)
async def read_book_no_rating(book_id:UUID):
for x in BOOKS:
if x.id == book_id:
return x
raise raise_item_cannot_he_found_exception()
4. Swagger 확인
BOOKS list의 dict 값을 가져오는데 response_model을 rating이 없는 BaseModel로 사전에 정의 했기 때문에 GET 요청 간 rating이 빠진 상태로 BookNoRating의 BaseModel 형식으로 데이터를 return 받게 되는 것을 볼 수 있음.
728x90
SMALL
'Develop > FastAPI' 카테고리의 다른 글
FastAPI Form Fields - 27 (0) | 2022.12.24 |
---|---|
FastAPI Status Code Response - 26 (0) | 2022.12.24 |
FastAPI Raise HTTP Exception(사용자 지정) - 24 (0) | 2022.12.24 |
FastAPI Raise HTTP Exception - 23 (0) | 2022.12.24 |
FastAPI Delete Request - 22 (0) | 2022.12.23 |