[TIL / Django] Westagram 3 - 로그인 view 작성

나른한 개발자·2022년 1월 17일
0

studylog

목록 보기
30/45

이번에는 로그인을 할 수 있는 뷰를 만든다.

signin 브랜치에 다음의 내용을 구현한다.

구현사항

  • 이메일, 비밀번호를 전달받아 로그인을 할 수 있다.
  • 계정 및 비밀번호가 전달되지 않은 경우 KeyError를 발생한다.
  • 계정 또는 비밀번호가 일치 하지 않는 경우 Invalid_user를 반환한다.
from json

from django.views import View
from django.http import JsonResponse

from user.models import User

class SingInView(View):
	user_data = json.loads(request.body)
    
    try:
        user_email = user_data['email']
        user_password = user_data['password']
        
        if not User.objects.filter(
        email=user_email, 
        user_password=user_password).exists():
        	return JsonResponse({"message": "INVALID_USER"}, status=401)
            
        return JsonResponse({"message": "SUCCESS"}, status=200)
        
    except KeyError:
    	return JsonResponse({"message": "KEY_ERROR"}, status=400)
        

피드백

  • filter 여러 조건 주기
    -> 처음에 이메일/비밀번호 유효성 검사를
    if not User.objects.filter(email=user_email).exists() or not User.objects.filter(password=user_password).exists() 이렇게 작성하였다. 하지만 filter는 여러개 조건을 ,로 넣을 수 있기 때문에 저렇게 길게 작성할 필요가 없었다.

    추가로 처음에 '아이디 또는 비밀번호가 일치하지 않을 시 에러 발생' 이라고 생각해서 User.objects.filter(Q(email=user_email) | Q(password=user_password)).exists() 가 아닐까 했는데 이렇게 하면 문제가 아이디나 패스워드 둘중에 하나만 일치해도 로그인이 되어버린다. 따라서 and(filter에선 ,로 구분되는) 로 조건을 써서 작성을 해야 올바르게 동작한다!!
profile
Start fast to fail fast

0개의 댓글