[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.)