Django ninja 쿼리스트링 Schema 처리하기

Django ninja api 를 쓰려고 하면 항상 Querystring 으로 받아야할 경우가 많이 있다. 매번 따로 정의해서 쓰는 것 보다 공통적인 것은 Schema로 정의해서 쓰고 싶은데, 어떤 때는 값이 있을 때도 있고, 없을 때도 있으니 이 경우를 다 처리하는게 복잡해 보였는데 Schema 와 ninja.Query() 함수로 좀 쉽게 구현해 보자.

 

Django-ninja 공식 사이트에는 이와 관련된 아래와 같은 튜토리얼이 있다. 이를 잘 이해하면 끝!

https://django-ninja.rest-framework.com/tutorial/query-params/#using-schema

You can also use Schema to encapsulate GET parameters:

import datetime
from typing import List

from pydantic import Field

from ninja import Query, Schema


class Filters(Schema):
    limit: int = 100
    offset: int = None
    query: str = None
    category__in: List[str] = Field(None, alias="categories")


@api.get("/filter")
def events(request, filters: Filters = Query(...)):
    return {"filters": filters.dict()}

 

여기에 포인트는 

class Filters(Schema) 로 Query string or query parameters 로 받을 부분을 추상화 했다는 것이다.

여기에 초기 값은 해당 값이 쿼리스트링으로 넘어오지 않아도 이값이 사용된다는 것이다. 즉, 안 넣어줘도 기본 값을 줄 수 있다는 얘기

 

그다음은 api 함수가 이것을 어떻게 받아 들이느냐?

filters: Filters = Query(...)

이 형태로 = Query(...) 이렇게 명시해 줘야 한다.

 

이렇게 해줘야 막 나열되어서 들어오는 query string 중에 필드명이 맞는 것을 골라서 Schema에 딱 넣어주게 된다.

반드시 정의시에 꼭 = Query(...)

배달은 정확히 확인해야지

Artem Podrez 님의 사진, 출처: Pexels