인스타그램 백엔드 클론코딩을 하면서 알게된 로그인시 발생하는 예외의 대해서 정리하고자 한다.
본격적으로 들어가기전 예외와 에러의 차이에 대해서 알아보자. 에러란 문법에러를 말하며 주로 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
아이디를 이메일로 대체하여 이메일과 비밀번호를 이용한 로그인을 구현해보았다. httpie
를 이용한 결과값을 보면서 예외처리한 코드이다.
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와 비밀번호가 아래와 같을 때 로그인 예외를 확인해보자.
아이디나 비밀번호 값이 빠져있을 때에는 잘못된 요청이라는 Bad Request
가 발생한다. KEY_ERROR
를 일으키도록 예외처리를 하였다.
아이디를 잘못 입력했을 때라는건 해당 아이디를 사용하는 사용자가 없다는 뜻과 같다. 그러므로 잘 못된 아이디를 입력했을 때 DoesNotExist
예외가 발생하게 된다. INVALID_USER
예외를 일으키도록 했다.
비밀번호를 잘못입력했다는 것은 입력한 사용자의 이메일에 매치되는 비밀번호가 틀렸다는 뜻이다. 이도 아이디를 잘못 입력했을 때와 동일하게 INVALID_USER
예외를 일으키도록 했다.