본문 바로가기

개발/장고

[해설과 함께 읽는 DRF 문서] Validation - Raising an exception on invalid data

반응형

.is_valid() 메소드는 부가적으로 raise_exception 플래그를 사용할 수 있는데, 이것을 사용하는 경우에 유효성 에러가 발생한다면,serilaizers.ValidationError exception을 발생 시킬 것이다

이러한 exception은 REST framework에서 제공되는 기본 exception 핸들러에 의해서 자동으로 관리되고 있고, 기본적으로 HTTP 400 Bad Request 응답을 리턴할 것이다.

# Return a 400 response if the data was invalid.
serializer.is_valid(raise_exception=True)

설명

  1. serializer.is_valid(raise_exception=True) 를 이용하면, 기본동작으로 is_valid 체크에서 에러가 날 때, ValidationError 를 raise 하게 된다.
  2. 대개의 경우에 view 에서 중간에 exception raise 될 경우, 500 응답을 주게 된다 그러나 위와 같이 ValidationError 가 raise되는 경우에는 DRF에서의 exception 핸들러에 의해서 400으로 리턴이 될 것이다. 즉, serializer.is_valid(raise_exception=True) 코드를 작성했고, 유효하지않은 데이터로 인해 ValidationError 가 raise 된 상태에서 어떤 exception handling을 하지 않는다면 그대로 400이 리턴될 것이다
class UserSerializerForTest(serializers.Serializer): 
    name = serializers.CharField()
    
class UserTest(APIView):
    def post(self, request):
        data = {"name1": "invalid key"}
        # 유효하지 않은 키를 넘겨서 에러를 발생시킴
        serializer = UserSerializerForTest(data=data)
        serializer.is_valid(raise_exception=True) # 여기서 터짐
        return Response()

결과

반응형