본문 바로가기
Fastapi

FastAPI 자습서 스터디 기록 (Query Parameters and String and numeric Validations, )

by Django_ 2022. 6. 12.
반응형

실제 path에는 없지만 쿼리에 사용되는 파라미터를 의미합니다.

from typing import Union

from fastapi import FastAPI, Query

app = FastAPI()


@app.get("/items/")
async def read_items(q: Union[str, None] = Query(default=None, max_length=50)):
    results = {"items": [{"item_id": "Foo"}, {"item_id": "Bar"}]}
    if q:
        # 입력 된 q를 그냥 표시만 추가함
        results.update({"q": q})
    return results

결과는 이렇게 나오게 됩니다.

 

만약에 q를 필수 항목으로 두고 싶다면 아래와 같이 작성해줍니다.

from fastapi import FastAPI, Query
from pydantic import Required

app = FastAPI()


@app.get("/items/")
async def read_items(q: str = Query(default=Required, min_length=3)):
    results = {"items": [{"item_id": "Foo"}, {"item_id": "Bar"}]}
    if q:
        results.update({"q": q})
    return results
    
 
  # {"detail":[{"loc":["query","q"],"msg":"field required","type":"value_error.missing"}]}

쿼리에는 다양한 인자를 추가 할 수 있습니다.

# Query 추가적인 매개변수들
Query(
        default=None,
        alias="item-query",
        title="Query string",
        description="Query string for the items to search in the database that have a good match",
        min_length=3,
        max_length=50,
        regex="^fixedquery$",
        deprecated=True,
    )

해당 인자들은 아래와 같이 docs에 자동으로 적용되어 보여지게 됩니다.

마지막으로 숫자에대한 검증입니다.

 

from fastapi import FastAPI, Path, Query

app = FastAPI()


@app.get("/items/{item_id}")
async def read_items(
    *,
    item_id: int = Path(title="The ID of the item to get", ge=0, le=1000),
    q: str,
    size: float = Query(gt=0, lt=10.5)
):
    results = {"item_id": item_id}
    if q:
        results.update({"q": q})
    return results

 

그리고 숫자 검증 또한 선언할 수 있습니다:

  • gt: 크거나(greater than)
  • ge: 크거나 같은(greater than or equal)
  • lt: 작거나(less than)
  • le: 작거나 같은(less than or equal)
반응형

댓글