답장
api _ 모델에서 pydantic 모델 대신 ormar 모델을 사용할 수 있습니다.
또한 ormar를 혼합 할 수 있습니다. 필요한 경우 pydantic이있는 모델.
응답에서 가장 일반적인 작업 중 하나는 응답 데이터에 포함하지 않을 특정 필드를 제외하는 것입니다.
이는 Ormar에서 다양한 방법으로 달성할 수 있으므로 아래에서 옵션을 검토하고 상황에 가장 적합한 옵션을 선택할 수 있습니다.
응답에서 필드 제외
선택 필드
각 선택 필드는 필요하지 않으므로 응답과 요청 모두에서 선택 필드를 건너뛸 수 있습니다.
다음 중 하나가 발생하는 경우 필드는 필요하지 않습니다.
- nullable로 표시된 필드 = 참
- 필드에는 기본값 또는 제공된 기능(예: 기본값 = "테스트")이 있습니다.
- 필드는 서버 _기본값을 설정합니다.
- 필드는 autoincrement=Trueprimary_key 필드(참고 ormar)입니다. 정수 기본 _key 기본값은 자동 증가입니다)
예:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | |
위의 예에서 필드 ID(자동 증가 정수), 첫 번째 _ 이름(nullable = True) 및 범주(기본값이 있는)는 선택 사항이며 응답에서 건너뛸 수 있으며 모델은 여전히 유효합니다.
필드가 nullable인 경우 생성 중 및 응답 중에 페이로드에 포함될 필요가 없으므로 위의 예에 따라 다음을 수행할 수 있습니다.
1 2 3 4 | |
즉, 요청에서 첫 번째 _ 이름을 전달하지 않으면 필드가 선택 사항이기 때문에 올바르게 검증하고 데이터베이스에 저장한 다음 이 필드 없이 저장된 레코드를 반환합니다(이 필드도 유효합니다).
!!!필드 값을 통과하지 못했지만 필드 자체는 여전히 응답 _ 모델에 존재하므로 응답 데이터에 나타나고 없음으로 설정됩니다.
1 | |
FastApi 응답_모델_제외
FastAPI에는 필드 이름의 집합(또는 목록)을 수락하는 응답 _Model_가 있습니다.
Ormar 및 Pydantic은 제외/포함 열 또는 중첩 모델(아래에 더 있음)을 설정할 수 있는 사전도 수락하기 때문에 한계가 있습니다.
경고 확인 중에 실패하므로 응답 _ 모델을 사용할 때 필수 필드를 제외할 수 없습니다.
1 2 3 | |
위의 엔드포인트는 다음과 같이 쿼리할 수 있습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | |
위의 예에서 암호 필드가 응답 데이터에서 완전히 사라지는 방법을 확인하십시오.
1 | |
중첩 모델 제외
Fasapi는 필드 이름 집합만 전달할 수 있으므로 간단히 제외되지만 ormar는 응답 _ 모델 _ 제외를 사용할 때 더 똑똑합니다.
Ormar에서는 두 가지 유형의 표기법을 사용하여 중첩 모델을 제외할 수 있습니다.
첫 번째는 모델 트리 구조를 나타내는 중첩 필드가 있는 사전이고 두 번째는 필드 이름에 대한 이중 밑줄 경로입니다.
사용자 범주가 별도의 모델이라고 가정합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | |
응답의 범주에서 우선 순위를 제외하려면 여전히 빠른 API 매개 변수를 사용할 수 있습니다.
1 2 3 | |
이중 밑줄을 사용하여 모델로 더 깊이 들어갈 수 있으며 중첩 모델에서 여러 필드를 제외하려면 전체 경로로 앞에 서야 합니다.response_model_exclude={"category__priority", "category__other_field", category__nested_model__nested_model_field} ETC 예에서.
!!!참고 가능한 제외 사항과 제외 사전 또는 설정을 작성하는 방법에 대해 자세히 알아보려면 설명서의 필드 섹션을 방문하십시오.
응답 \ _ 모델 \ _ 제외 매개 변수 외에도 Fastapi는 pydantic에서 상속된 다른 매개 변수도 지원합니다. 이 모든 것은 ormar와도 함께 작동하지만 약간의 뉘앙스가 있을 수 있으므로 문서의 dt 섹션을 읽는 것이 가장 좋습니다.
Model.Model_dump에서 제외 ()
또는 ormar에서 사전을 반환할 수 있습니다. 모델링하고 사용하십시오.
이렇게 사전으로 제외/포함을 설정하고 중첩 모델의 필드를 제외할 수도 있습니다.
!!!경고 응답_ 모델을 사용하지 않으면 이론적으로 응답에 형식이 있을 수 있으므로 API 문서에 응답 예제와 스키마가 없습니다.
1 2 3 4 5 | |
!!!요청에서 암호 필드를 통과하더라도 위의 예에서는 암호 필드가 무효화되지만 응답 스키마의 일부이고 값이 없음으로 설정되기 때문에 필드가 여전히 존재합니다.
이런 식으로 필드를 완전히 제외하려면 응답_모델을 사용하지 말고 모델_dump()에서 제외하십시오.
또는 ormar 모델에서 사전을 반환할 수도 있습니다. 이와 같이 사전에 제외/포함을 설정하고 중첩 모델의 필드를 제외할 수도 있습니다.
!!!이론적으로는 여기서 응답 유효성을 잃게 되지만 ormar에서 작동 중이기 때문입니다. 모델, 응답 데이터는 데이터베이스 쿼리 후에 이미 검증됩니다(ormar 모델은 피단트 모델이기 때문입니다).
따라서 응답_모델을 완전히 건너뛰면 다음을 수행할 수 있습니다.
1 2 3 4 | |
!!!응답_ 모델을 건너뛸 때 반환 후 응답이 더 이상 검증되지 않으므로 이제 필수 필드를 제외할 수도 있습니다.
1 | |
ormar에서 pydantic 모델을 생성합니다. 모델
필드를 제외하는 작업이 매우 일반적이기 때문에 Ormar는 기존 Ormar에서 Pydantic 모델을 생성하는 특별한 방법을 가지고 있습니다. 모든 필드를 다시 입력할 필요가 없는 모델.
이 메서드는 모든 모델 클래스에서 사용할 수 있는 get_pydantic() 메서드입니다.
1 2 3 4 5 | |
!!! 참고 더 많은 예제를 보고 더 많이 읽으려면 설명서의 get_pydantic 섹션을 방문하십시오.
경고 get_pydantic 메서드는 모델의 루프를 피할 수 있는 알고리즘을 기반으로 중첩 모델 트리의 모든 모델을 생성합니다(모델_dump(), _all() 선택 등).
1 2 3 | |
이렇게 하면 트리의 여러 잎에 다른 필드를 제외/포함할 수 있습니다.
독립 캔틸레버 모델
마지막 해결책은 수동으로 별도의 Pydantic 모델을 만드는 것입니다. 일반 FastAPI 응용 프로그램과 동일하게 작동하므로 다양한 응답 및 요청 모델 등을 사용할 수 있습니다.
샘플:
1 2 3 4 5 6 7 8 9 10 11 12 13 | |