https://django-ninja.rest-framework.com/tutorial/routers/

 

Routers - Django Ninja

Routers Real world applications can almost never fit all logic into a single file. Django Ninja comes with an easy way to split your API into multiple modules using Routers. Let's say you have a Django project with a structure like this: ├── myprojec

django-ninja.rest-framework.com

 

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

+ Recent posts