개발하자

FastAPI를 사용하여 쿼리 매개 변수의 목록 필드를 사용하도록 Swagger UI를 설정하는 방법은 무엇입니까?

Cuire 2023. 9. 1. 14:16
반응형

FastAPI를 사용하여 쿼리 매개 변수의 목록 필드를 사용하도록 Swagger UI를 설정하는 방법은 무엇입니까?

목록 필드에서 종속성 주입을 사용하는 앱을 만들 때 매개 변수는 자동으로 Swagger의 요청 본문으로 이동합니다UI:

from fastapi import FastAPI, Query, Depends
import uvicorn
from pydantic import BaseModel, Field
from typing import List


class QueryParams(BaseModel):
    name: str = Field(...)
    ages: List[int] = Field([])


app = FastAPI()


@app.get("/test")
def test(query: QueryParams = Depends()):
    return "hi"

uvicorn.run(app)

SwaggerUI

즉, 스웨거 UI에서 테스트할 수 없습니다. 필드를 쿼리로 변경해도 작동하지 않습니다:

from fastapi import FastAPI, Query, Depends
import uvicorn
from pydantic import BaseModel, Field
from typing import List


class QueryParams(BaseModel):
    name: str = Field(...)
    ages: List[int] = Query([])  # <-- Query


app = FastAPI()


@app.get("/test")
def test(query: QueryParams = Depends()):
    return "hi"

uvicorn.run(app)

경로 함수에 넣으면 다음과 같이 작동합니다:

from fastapi import FastAPI, Query, Depends
import uvicorn
from pydantic import BaseModel, Field
from typing import List


class QueryParams(BaseModel):
    name: str = Field(...)


app = FastAPI()


@app.get("/test")
def test(query: QueryParams = Depends(), ages: List[int] = Query([])):
    return "hi"

uvicorn.run(app)

Working UI

종속성 주입을 사용하여 기본 모델에서 목록 쿼리 필드를 인식하도록 스웨거 UI를 어떻게 할 수 있습니까?




에서 설명한 바와 같이 Pydantic 모델 내의 필드를 사용할 수 없으며 매개 변수가 될 것으로 예상할 수 없습니다. 이 방법은 아래와 같이 쿼리 매개 변수 구문 분석을 별도로 구현하는 것입니다:

class QueryParams:
    def __init__(
        self,
        name: str,
        ages: List[int] = Query(...)
    ):
        self.name = name
        self.ages = ages
        
@app.get("/test")
def test(query: QueryParams = Depends()):
    return "hi"

위의 내용은 아래와 같이 데코레이터를 사용하여 다시 작성할 수 있습니다:

from dataclasses import dataclass

@dataclass
class QueryParams:
    name: str
    ages: List[int] = Query(...)

@app.get("/test")
def test(query: QueryParams = Depends()):
    return "hi"

갱신하다

Pydantic 모델 내에서 필드를 쿼리 매개 변수로 정의할 수 있는 in을 래핑할 수 있습니다. 실제 예제는 에서 확인할 수 있습니다.


반응형