https://django-ninja.rest-framework.com/tutorial/routers/
Django Ninja에서 App마다 api.py와 schema.py를 생성해서 관리를 해야한다. 하지만 App이 많아질 수록 관리하기도 힘들어진다. 이럴경우 Router 기능을 사용하면 된다.
1. Router 폴더 구조
각 App마다 api.py를 생성한다. (schema.py도 생성해준다.)
2. App별 api.py 작성
course/api.py
from typing import List
from ninja import Router
from .models import CoursePage
from . import schema
course_router = Router()
@course_router.get('/', response=List[schema.CourseSchema])
def courses(request):
return CoursePage.objects.all()
@course_router.get('/{course_id}', response={200: schema.CourseSchema, 404: schema.NotFoundSchema})
def course(request, course_id: int):
try:
course = CoursePage.objects.get(id=course_id)
return course
except CoursePage.DoesNotExist:
return 404, {"message": "코스 페이지가 존재하지 않습니다."}
간단하게 CoursePage라는 모델의 정보를 가져오는 api를 구축하였다.
Schema와 endpoint 구현은 기존의 NinjaAPI와 동일하게 작성하면 된다.
3. Project api.py 생성
myproject/api.py
import orjson
from ninja.renderers import BaseRenderer
from ninja import NinjaAPI
from course.api import course_router
# api 렌더링 (한글이 깨지는 문제)
class ORJSONRenderer(BaseRenderer):
media_type = "application/json"
def render(self, request, data, *, response_status):
return orjson.dumps(data)
api = NinjaAPI(renderer=ORJSONRenderer())
# 라우터 등록
api.add_router('/courses/', course_router)
api.add_router를 통해 url를 지정해주면 된다.
'Back-End > Django-ninja' 카테고리의 다른 글
Django Ninja Method Not Allowed 오류 (0) | 2021.12.09 |
---|---|
Django Ninja Render (0) | 2021.11.30 |
Django Ninja Tutorial 5 (0) | 2021.11.30 |
Django Ninja Tutorial 4 (0) | 2021.11.30 |
Django Ninja Tutorial 3 (0) | 2021.11.29 |