스택큐힙리스트

어떻게 FastAPI를 사용하여 Pydantic 모델에서 Optional 미설정 값들을 제외할 수 있을까요? 본문

카테고리 없음

어떻게 FastAPI를 사용하여 Pydantic 모델에서 Optional 미설정 값들을 제외할 수 있을까요?

스택큐힙리스트 2023. 11. 7. 16:23
반응형

저는 이 모델을 가지고 있습니다:


class Text(BaseModel):
id: str
text: str = None
class TextsRequest(BaseModel):
data: list[Text]
n_processes: Union[int, None]

따라서 다음과 같은 요청을 받을 수 있기를 원합니다:


{data: [id: 1, text: The text 1], n_processes: 8} 

그리고


{data: [id: 1, text: The text 1]}.

현재 두 번째 경우에는 다음과 같은 결과를 얻습니다:


{'data': [{'id': '1', 'text': 'The text 1'}], 'n_processes': None}

다음 코드를 사용하여:


app = FastAPI()
@app.post(/make_post/, response_model_exclude_none=True)
async def create_graph(request: TextsRequest):
input_data = jsonable_encoder(request)

그래서 여기서 어떻게 n_processes를 제외할 수 있을까요?

답변 1

Pydantic >= 2.0은 model.dict() 대신에 model.model_dump(...)을 사용하도록 deprecates되었습니다.

Pydantic의 model.dict(...)의 exclude_none 매개변수를 사용할 수 있습니다:


class Text(BaseModel):
id: str
text: str = None
class TextsRequest(BaseModel):
data: list[Text]
n_processes: Optional[int]
request = TextsRequest(**{data: [{id: 1, text: The text 1}]})
print(request.dict(exclude_none=True))

결과:


{'data': [{'id': '1', 'text': 'The text 1'}]}

또한, Union[int, None] 대신에 Optional[int]을 더욱 이디오매틱하게 작성하는 것입니다.

답변 2

Pydantic과 FastAPI를 사용하여 Pydantic 모델에서 Optional이 설정되지 않은 값들을 제외하는 방법을 알아보겠습니다. 이 주제에 대해 SEO에 초점을 맞춘 한국어 에세이를 작성해보겠습니다.
---
Pydantic은 Python에서 데이터 유효성 검사를 수행하기 위한 강력하고 직관적인 도구입니다. FastAPI는 이러한 Pydantic 모델을 사용하여 빠르고 효율적인 웹 애플리케이션 개발을 위한 프레임워크입니다. 이 두 도구를 혼합하여 사용하면 개발자는 강력한 데이터 유효성 검사와 함께 웹 애플리케이션을 구축할 수 있습니다.
Pydantic 모델에서는 필드에 대한 검증 규칙을 지정할 수 있습니다. Optional이라는 키워드를 사용하여 필드가 설정되지 않았을 때 유효성 검사를 통과할 수 있도록 만들 수 있습니다. 그러나 때로는 모델에서 이러한 설정되지 않은 값들을 제외하고 싶을 수도 있습니다. 이를 위해 Pydantic의 exclude_unset 매개변수를 사용할 수 있습니다.
exclude_unset 매개변수를 True로 설정하면 설정되지 않은 값들을 제외하고 Pydantic 모델을 생성할 수 있습니다. 이는 쿼리 매개변수와 같은 경우 유용할 수 있습니다. 쿼리 매개변수의 값이 설정되지 않은 경우, 해당 필드는 모델에서 제외됩니다. 이렇게 함으로써 사용자는 설정되지 않은 매개변수를 무시하고 직접 제공된 값들만 사용할 수 있습니다.
아래는 Pydantic 모델에서 Optional이 설정되지 않은 값을 제외하는 예시입니다.
```python
from fastapi import FastAPI
from pydantic import BaseModel
from typing import Optional
class Item(BaseModel):
name: str
description: Optional[str] = None
price: float = 0.0
quantity: int
app = FastAPI()
@app.post(/items/)
async def create_item(item: Item):
# exclude_unset 매개변수를 사용하여 설정되지 않은 값들을 제외하고 모델 생성
# 따라서 description 필드는 설정되지 않은 경우 모델에서 제외됩니다.
new_item = Item(**item.dict(exclude_unset=True))
# 모델에 필요한 로직을 적용하고 새로운 아이템을 생성합니다.
# 생략...
return new_item
```
위 예시에서는 exclude_unset 매개변수를 사용하여 설정되지 않은 description 필드를 제외하고 새로운 Item 객체를 생성합니다. 이렇게 함으로써 사용자는 description을 직접 설정하지 않고 다른 필드들만 제공하여 아이템을 생성할 수 있습니다.
Pydantic과 FastAPI를 함께 사용하여 데이터 유효성 검사를 수행하는 동시에 Optional이 설정되지 않은 값들을 제외할 수 있습니다. 이를 통해 웹 애플리케이션의 효율성을 향상시키고, 사용자가 필요한 데이터만 입력할 수 있도록 도움을 줄 수 있습니다.
---
이렇게 한글로 작성된 에세이는 SEO에 더욱 효과적일 수 있습니다. 이는 한국어로 작성된 검색 질의에 대해 더 잘 일치하고 상위에 노출될 수 있기 때문입니다. 또한, 관련된 키워드 및 구문을 포함시킴으로써 검색 엔진 최적화를 고려할 수 있습니다. 위의 에세이에서는 Pydantic, FastAPI, 데이터 유효성 검사, 설정되지 않은 값들 제외 등과 같은 핵심 키워드를 사용하여 SEO를 고려하였습니다.

반응형
Comments