Assignment #1 | Westagram [Mission 4] 로그인 기능 구현

Jayson Hwang·2022년 5월 21일
0

Westagram Project

목록 보기
4/11
post-thumbnail

::: 현재까지 진행 상황 :::

  • 초기 세팅 완료
  • Users 앱 생성 완료
  • models.py의 User 클래스 작성 완료
  • DB에 migrate까지 진행
  • 회원가입 기능 구현 (정규표현식, 예외처리 사용)

1.. Must Do..

  • 로그인 시, 사용자 계정 & 비밀번호 필수

  • 계정 혹은 패스워드 키가 전달되지 않을 경우,
    {"message":"KEY_ERROR"}, status=400 반환

  • 계정 혹은 패스워드를 다르게 입력한 경우,
    {"message":"INVALID_USER}, status=401 반환

  • 로그인 성공 시,
    {"message":"SUCCESS"}, status=200} 반환

2.. views.py

📌 내가 작성한 SignIn View 코드

class SignInView(View):
    def post(self, request):
        try:
            data = json.loads(request.body)

            email    = data['email']
            password = data['password']

            if not User.objects.filter(email = email, password = password).exists():
                return JsonResponse({"message": "INVALID_USER"}, status=401)

            return JsonResponse({"message": "SUCCESS"}, status=200)

        except KeyError: 
            return JsonResponse({"message": "KEY_ERROR"}, status=400)

📌 코드 설명

2-1.. 변수할당::

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

2-2.. 이메일, 패스워드 필터링::

if not User.objects.filter(email = email, password = password).exists():
	return JsonResponse({"message": "INVALID_USER"}, status=401)
    
# 코드리뷰를 받기 전에는 아래와 같은 지저분한 코드를 작성했었음....

# if not User.objects.filter(email=email).exists() or \
# 	 not User.objects.get(email=email).password == password:

# 하지만, filter().exists()를 통해서 get method를 사용하지 않고 한번에 필터링이 가능

2-3.. 예외처리::

try:

except KeyError: 
    return JsonResponse({"message": "KEY_ERROR"}, status=400)

# 이메일 or 비밀번호의 키가 제대로 전달되지 않는 경우 400에러를 반환시키기 위한 예외처리
  
# 이 케이스의 경우 KeyError에 해당되므로, 위와 같이 코드를 작성
# (KeyError:: 키 없음 에러(주로 딕셔너리 사용시)

REFERENCE


3..URLconf

users/urls.py

from django.urls import path
from users.views import SignUpView, SignInView # SignInView 추가!!

urlpatterns = [
    path('/signup', SignUpView.as_view()),
    path('/signin', SignInView.as_view()), # SignInView 추가!!
] 

추가적으로, Token을 부여하기 위한 암호화를 진행하게되면 회원가입, 로그인 코드들에 bcrypt와 jwt가 추가된다.
암호화 관련된 내용은 추후 포스팅에서 다루도록 하겠다.

profile
"Your goals, Minus your doubts, Equal your reality"

0개의 댓글