Django Assignment 1 | Westagram 3)

김기현·2022년 2월 19일
0
post-thumbnail

[Mission 4] 로그인 기능 구현

미션

  • 로그인 View 기능 정의
    1. 로그인을 할 때는 사용자 계정과 비밀번호가 필수입니다.
    2. 계정이나 패스워드 키가 전달되지 않았을 경우, {"message": "KEY_ERROR"}, status code 400 을 반환합니다.
    3. 계정을 잘 못 입력한 경우 {"message": "INVALID_USER"}, status code 401을 반환합니다.
    4. 비밀번호를 잘 못 입력한 경우 {"message": "INVALID_USER"}, status code 401을 반환합니다.
    5. 로그인이 성공하면 {"message": "SUCCESS"}, status code 200을 반환합니다.

  • URLconf 정의
    1. 클라이언트의 요청을 받아서 로그인 뷰를 호출할 수 있도록 urls.py 를 작성해주세요.

  • 로그인 확인
    1. httpie를 이용하여 로그인을 진행해보세요.

수정 사항들 내용

  • 계정이나 패스워드 키가 전달되지 않았을 경우 메시지 반환 구현
  • 계정 및 비밀번호를 잘못 입력한 경우 에러메시지 반환 구현
  • 로그인이 성공할 시 성공 메시지 반환 구현
  • URLconf 정의 완료
  • httpie로 로그인 실행 작동 확인

코드 초안

1. 수정하기 전 users/urls

from django.urls import path, include
from users.views import SignUpView, LoginView

urlpatterns = [
    path("signup", SignUpView.as_view()),
    path("login", LoginView.as_view()),
]

2. 수정하기 전 users/views

.
.
.
class LoginView(View):
    def post(self, request):
        try:
            data = json.loads(request.body)
            email               = data['email']
            password            = data['password']
            # 유저 검증하는 변수
            user_verify = User.objects.filter(
                email      = data["email"],
                password   = data['password']
            )
            if not User.objects.filter(email = email).exists():
                return JsonResponse({'MESSAGE' : 'INVALIDUSER : Wrongemail'}, status=401)  
                      
            if not User.objects.filter(password = password).exists():
                return JsonResponse({'MESSAGE' : 'INVALIDUSER : Wrongpassword'}, status=401)      
            # 유저 검증 변수로 user 존재를 확인
            if user_verify.exists():
                return JsonResponse({'MESSAGE' : 'SUCCESS'}, status=200)
            
        except KeyError:
            return JsonResponse({"message": "KEY_ERROR"}, status=400)

peer 피드백

수정하기 전 users/views

  • email과 password가 db에 있는지 검증하는데 왜 user_verify 변수를 사용하여 또 검증하는지? 만약 불필요한 검증일 경우 속도에서 손해

코드 개선안

1.수정 후 users/views

user_verify 변수를 사용하지 않아도 email, password 검증이 끝나면 자동적으로 성공반환을 하기에 제거했습니다. 그리고 'INVALIDUSER : Wrongpassword'라는 표현을 수정하였습니다.

.
.
.
class LoginView(View):
    def post(self, request):
        try:
            data = json.loads(request.body)
            email               = data['email']
            password            = data['password']

            if not User.objects.filter(email = email).exists():
                return JsonResponse({'MESSAGE' : 'Invalid User Email'}, status=401)  
                      
            if not User.objects.filter(password = password).exists():
                return JsonResponse({'MESSAGE' : 'Invalid User Password'}, status=401)      
            # email, password filter를 통과하면 성공 반환
            return JsonResponse({'MESSAGE' : 'SUCCESS'}, status=200)
            
        # 키에러 시 에러 반환
        except KeyError:
            return JsonResponse({"message": "KEY_ERROR"}, status=400)

profile
피자, 코드, 커피를 사랑하는 피코커

0개의 댓글