<22.10.19 추가 local에서 개발환경 구축하는 글을 작성해봤습니다.>
https://inspireworld.tistory.com/121
개인적으로 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배포에 대해서도 글로 작성해볼까 한다.
'IT > Django' 카테고리의 다른 글
UnicodeDecodeError: 'cp949' codec can't decode bytes in position : illegal multibyte sequence (0) | 2023.05.09 |
---|---|
Setup django-allauth social login (0) | 2022.09.08 |
django template에서 query string을 href에 넣는 방법. (0) | 2022.05.31 |
Django query 최적화(select_related, prefetch_related, Prefetch + @ django_auto_prefetching) (0) | 2022.05.25 |
Frontend와 Backend간 editable table row 업데이트 / 삭제 로직 (0) | 2022.04.25 |