[Django] 로그인 예외

인스타그램 백엔드 클론코딩을 하면서 알게된 로그인시 발생하는 예외의 대해서 정리하고자 한다.

1. 예외와 에러

본격적으로 들어가기전 예외와 에러의 차이에 대해서 알아보자. 에러란 문법에러를 말하며 주로 SyntaxError를 말한다. 예외는 문장이나 표현식이 문법적으로 옳다고 하더라도 실행중에 생기는 에러들을 예외(exception)라고 부른다.

  • 예외 예시
>>> 10 * (1/0)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ZeroDivisionError: division by zero
>>> 4 + spam*3
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'spam' is not defined
>>> '2' + 2
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: Can't convert 'int' object to str implicitly

2. 로그인 예외 유형

아이디를 이메일로 대체하여 이메일과 비밀번호를 이용한 로그인을 구현해보았다. httpie를 이용한 결과값을 보면서 예외처리한 코드이다.

  • 로그인 view 예시
class SignInView(View):
    def post(self, request):
        data = json.loads(request.body)
        try:
            email    = data['email']
            password = data['password']

            if not User.objects.filter(email=email).exists():
                return JsonResponse({'error': 'INVALID_USER'}, status=401)
            if User.objects.get(email=email).password == password:
                return JsonResponse({'message':'SUCCESS'}, status=200)
            return JsonResponse({'error': 'INVALID_USER'}, status=401)

        except KeyError:
            return JsonResponse({'error': 'KEY_ERROR'}, status=400)

view를 위와 같이 작성하고 ID와 비밀번호가 아래와 같을 때 로그인 예외를 확인해보자.

1) 아이디나 비밀번호 값이 빠져있을 때

  • 로그인 시도 ID, Password
    • ID: (입력 안함)
    • Password: aabbccdd

아이디나 비밀번호 값이 빠져있을 때에는 잘못된 요청이라는 Bad Request가 발생한다. KEY_ERROR 를 일으키도록 예외처리를 하였다.

  • 발생 예외: Bad Request

  • 예외처리 결과

2) 아이디 잘못입력했을 때

아이디를 잘못 입력했을 때라는건 해당 아이디를 사용하는 사용자가 없다는 뜻과 같다. 그러므로 잘 못된 아이디를 입력했을 때 DoesNotExist 예외가 발생하게 된다. INVALID_USER 예외를 일으키도록 했다.

  • 발생 예외: DoesNotExist

  • 예외처리 결과

3) 비밀번호 잘못입력했을 때

비밀번호를 잘못입력했다는 것은 입력한 사용자의 이메일에 매치되는 비밀번호가 틀렸다는 뜻이다. 이도 아이디를 잘못 입력했을 때와 동일하게 INVALID_USER 예외를 일으키도록 했다.

  • 발생 예외: ValueError

  • 예외처리 결과

참조
🔗 python documentation | 에러와 예외

좋은 웹페이지 즐겨찾기