티스토리 뷰
rest_framework에 있는 기본 exception과
APIException에 대해서 알아보겠습니다.
[1] Exception 처리해야하는 이유
저의 SignupView는 이렇게 되어있는데요
아무 exception도 처리안해준 상태입니다.
class SignupView(APIView):
def post(self, request):
unique_string = get_random_string(length=10)
temporary_family_code = models.TemporaryFamilyCode(code=unique_string)
user = User.objects.create_user(username=request.data['id'], password=request.data['password'])
profile = models.Profile(user=user, nickname=request.data['nickname'], temporary_family_code=temporary_family_code)
temporary_family_code.save()
user.save()
profile.save()
token = Token.objects.create(user=user)
return Response({"token": token.key, "nickname": profile.nickname, "temporary_family_code": profile.temporary_family_code.code})
예를 들어 id를 안보냈다고 했을때
아래와 처럼 html 에러가 납니다,,,,
이런식으로 알맞은 status code와 detail을 응답해준다면
클라이언트 쪽에서 이것을 보고 팝업을 띄우는등 예외처리하기 더 좋겠죠?!?
[1] Exception
Exception문서에 보면
Exception을 몇 종류 미리 만들어놨는데요 이것을 사용하면 됩니다.
등등 있습니다. 문서에서 확인해주세요
이렇게 import해주신다음
from rest_framework import exceptions
raise로 exception을 발생시켜주면 됩니다.
[2] APIException
APIException은 이미 지정된 exception말고 custom한 exception을 만들어서 쓰고 싶을때 사용합니다.
예를 들어 이렇게 해주면 됩니다.
위에서 썼던 exception을 APIException으로 한번 바꿔볼게요-!!
import 해주고
from rest_framework.exceptions import APIException
Custom Exception을 만들어보겠습니다.
그리고 raise로 exception을 일으켜주면 됩니다.
그리고 key값을 빼먹고 요청을 해보면
정의해둔 exception이 잘나옵니다.
default code는 안나오는 건가봐요,,!
Reference
www.django-rest-framework.org/api-guide/exceptions/#exceptions
'🐍 > DRF' 카테고리의 다른 글
[DRF] custom exceptionHandler을 만들어서 에러응답을 커스터마이징 하자 (0) | 2020.09.30 |
---|---|
[DRF] SerializerMethodField로 모델에서 변형된 JSON을 내려주기 (0) | 2020.09.26 |
[DRF] TokenAuthentication (유저마다 토큰을 발급해서 유저를 식별해보자) (10) | 2020.09.21 |
[Heroku] Heroku로 장고 API 배포하기 (0) | 2020.09.15 |
[DRF] ERD(Entity–relationship model) 그리기 & 모델 만들기 (0) | 2020.09.13 |
- Total
- Today
- Yesterday
- Flutter Spacer
- ipad multitasking
- 구글 Geocoding API
- Django FCM
- SerializerMethodField
- flutter dynamic link
- Flutter 로딩
- Flutter Clipboard
- Sketch 누끼
- Dart Factory
- Watch App for iOS App vs Watch App
- Flutter Text Gradient
- ribs
- github actions
- flutter 앱 출시
- flutter build mode
- Django Heroku Scheduler
- DRF APIException
- 장고 Custom Management Command
- flutter deep link
- METAL
- cocoapod
- Django Firebase Cloud Messaging
- Python Type Hint
- 플러터 싱글톤
- Flutter getter setter
- PencilKit
- 플러터 얼럿
- drf custom error
- 장고 URL querystring
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |