본문 바로가기

개발하자

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

반응형

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을 래핑할 수 있습니다. 실제 예제는 에서 확인할 수 있습니다.


반응형