요청
FastAPI 요청 본문 매개 변수에서 Pydantic 모델 대신 Ormar 모델을 사용할 수 있습니다.
또한 ormar를 혼합 할 수 있습니다. 필요한 경우 pydantic이있는 모델.
요청에서 가장 일반적인 작업 중 하나는 API로 전송되는 페이로드에 포함하지 않을 특정 필드를 제외하는 것입니다.
이는 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 | |
즉, 요청에서 먼저 _ 이름을 전달하지 않으면 필드가 선택 사항이므로 올바르게 검증되고 없음이 데이터베이스에 저장됩니다.
ormar에서 pydantic 모델을 생성합니다. 모델
필드를 제외하는 작업이 매우 일반적이기 때문에 Ormar는 기존 Ormar에서 Pydantic 모델을 생성하는 특별한 방법을 가지고 있습니다. 모든 필드를 다시 입력할 필요가 없는 모델.
이 메서드는 모든 모델 클래스에서 사용할 수 있는 get_pydantic() 메서드입니다.
1 2 3 4 5 6 | |
!!! 참고 더 많은 예제를 보고 더 많이 읽으려면 설명서의 get_pydantic 섹션을 방문하십시오.
경고 get_pydantic 메서드는 모델의 루프를 피할 수 있는 알고리즘을 기반으로 중첩 모델 트리의 모든 모델을 생성합니다(모델_dump(), _all() 선택 등).
1 2 3 | |
이렇게 하면 트리의 여러 잎에 다른 필드를 제외/포함할 수 있습니다.
MyPy 및 유형 확인
함수를 파이썬 유형으로 할당하면 런타임에 통과하고(확인되지 않았기 때문에) MyPy와 같은 정적 유형 검사기가 불만을 제기합니다.
함수 호출의 결과는 주어진 모델에 대해 항상 동일하지만 동적으로 생성된 유형은 허용되지 않습니다.
두 가지 옵션이 있습니다.
첫 번째는 단순히 # type을 추가하는 것입니다. 유형 확인을 건너뛰려면 무시하십시오.
1 2 3 4 5 | |
두 번째는 FastAPI를 사용하여 함수 매개 변수를 추출하는 좀 더 진부합니다.
지정된 매개 변수에 대해 __주석__ 항목을 재정의할 수 있습니다.
1 2 3 4 5 6 7 8 | |
이렇게 하면 mypy가 사용자가 ormar 모델이라고 "생각"하게 되지만 요청에서는 중요하지 않으므로(어쨌든 jsonized 판결을 통과하고 저장하기 전에 변환해야 함).
결과 모델이 필드의 하위 집합이 되므로 모든 필수 필드가 검증되고 사용되지 않은 모든 필드가 런타임에 실패하기 때문에 이 작업은 여전히 잘 작동합니다.
독립 캔틸레버 모델
마지막 해결책은 수동으로 별도의 Pydantic 모델을 만드는 것입니다. 일반 FastAPI 응용 프로그램과 동일하게 작동하므로 다양한 응답 및 요청 모델 등을 사용할 수 있습니다.
샘플:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | |