IT/Django

Django-ninja-extra 튜토리얼(정리중)

bepuri 2022. 6. 30. 10:16
728x90

<22.10.19 추가 local에서 개발환경 구축하는 글을 작성해봤습니다.>

https://inspireworld.tistory.com/121

 

django + vite + vue + tailwind hmr 환경구축(1)

먼저, 이번 튜토리얼의 목표는 django + vite + vue + tailwind 환경에서 hmr이 정상적으로 작동하는 boilerplate를 구축하는 것이 목표이다. 제가 django + vue연동 과정에서 webpack을 사용했는데,, 프로젝트가..

inspireworld.tistory.com

개인적으로 django-ninja만 사용하시는걸 추천드립니다.

 

원글

여기서 더 django에선 drf django-rest-framework가 더 대중적인데.. drf쓰는 사람들이 자주 언급하는 내용이 불필요한 기능이 너무 많다는 것이다. 그래서 django-ninja를 도입을 결정하게되었다, 더 가볍고, 내가 필요로 하는 주된 기능들만 있었다. 가볍기에 속도도 빠르다. 작성할 코드도 더 간결해지는 것 같고 말이다.

또한 django-ninja를 사용하지 않고 extra를 사용하는 이윤 django-ninja는 class based가 아니라 함수들이 주렁주렁 생기는게 보기 지저분해보였다. 이게 좋은 점도 되지만 나쁜점도 된다. 일단 무겁다는거고, 써보면 알겠지만 serailzier view쪽 구현하는게 대다수이고, 나머진 특별한게 없다..
그래서 ninja-extra를 도입하게 되었고, 적용하다보니 도큐먼트가 업데이트 안된것도 있고해서, 도큐먼트에서 상세히 언급하지 않는 내용 등을 좀 정리해볼까 한다.

먼저 Custom Exception 쪽에

공식 document는 아래있고,

https://eadwincode.github.io/django-ninja-extra/tutorial/custom_exception/

[Error Handling - Django Ninja Extra

Custom Exception Django-Ninja provides an intuitive way of handling custom exceptions by registering a function(handler) against an Exception type, just like it's done in a Flask app. So in that sense, Django-Ninja-Extra has an APIException exception type

eadwincode.github.io](https://eadwincode.github.io/django-ninja-extra/tutorial/custom_exception/)

기본적으로 django-ninja와 같이 쓸 수 있다.. django-ninja를 상속받아서 만든 API이니까 말이다.

from ninja_extra.exceptions import APIException
from ninja_extra import api_controller, route, NinjaExtraAPI, status
from ninja import constants


class CustomAPIException(APIException):
    status_code = status.HTTP_401_UNAUTHORIZED
    message = 'UnAuthorized'


@api_controller('', tags=['My Operations'], auth=constants.NOT_SET, permissions=[])
class MyController:
    @route.get('/exception')
    def custom_exception(self):
        raise CustomAPIException()


api = NinjaExtraAPI(title='Exception Test')
api.register_controllers(MyController)

일단 이 예제코드 잘못되었다.

from ninja_extra.exceptions import APIException
from ninja_extra import api_controller, route, NinjaExtraAPI, status
from ninja import constants


class CustomAPIException(APIException):
    status_code = status.HTTP_401_UNAUTHORIZED
    default_detail = 'UnAuthorized'

...

이렇게 되어야 되고
이것보다는 ValidationException이라고 ninja_extra.exception쪽에 있는 걸 사용하는게 보편적일듯하다
사용법은 마찬가지로

raise ValidationException('exception detail') 이런식으로 사용하면된다.
추가적인것들은 지속적으로 업데이트할 생각이다.

향후 django + vite + vue + tailwind 에서 hmr을 작동시키기 위한 세팅 그리고 product배포에 대해서도 글로 작성해볼까 한다.

 

728x90