[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와 비밀번호가 아래와 같을 때 로그인 예외를 확인해보자.
- 로그인 ID, Password
- ID: [email protected]
- Password: aabbccdd
1) 아이디나 비밀번호 값이 빠져있을 때
- 로그인 시도 ID, Password
- ID: (입력 안함)
- Password: aabbccdd
아이디나 비밀번호 값이 빠져있을 때에는 잘못된 요청이라는 Bad Request가 발생한다. KEY_ERROR 를 일으키도록 예외처리를 하였다.
- 발생 예외: Bad Request

- 예외처리 결과

2) 아이디 잘못입력했을 때
- 로그인 시도 ID, Password
- ID: [email protected]
- Password: aabbccdd
아이디를 잘못 입력했을 때라는건 해당 아이디를 사용하는 사용자가 없다는 뜻과 같다. 그러므로 잘 못된 아이디를 입력했을 때 DoesNotExist 예외가 발생하게 된다. INVALID_USER 예외를 일으키도록 했다.
- 발생 예외: DoesNotExist

- 예외처리 결과

3) 비밀번호 잘못입력했을 때
- 로그인 시도 ID, Password
- ID: [email protected]
- Password: eeeeeeee
비밀번호를 잘못입력했다는 것은 입력한 사용자의 이메일에 매치되는 비밀번호가 틀렸다는 뜻이다. 이도 아이디를 잘못 입력했을 때와 동일하게 INVALID_USER 예외를 일으키도록 했다.
- 발생 예외: ValueError

- 예외처리 결과

Author And Source
이 문제에 관하여([Django] 로그인 예외), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@anjaekk/Django-로그인-예외저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)