[Westagram] : 회원가입

Kiyong Lee·2021년 9월 28일
0

Django

목록 보기
12/35

과제


1. 구현 전 생각

try-except문이 굉장히 많을 것 같아 혼란스러웠다.

첫 번째로 이메일-패스워드가 전달 안 될 시, except KEYERROR
두 번째로 이메일에 대한 except ValidationError
세 번째로 비밀번호에 대한 except ValidationError

이메일 중복이야 exists()를 이용하여 리턴해주면 되니까 상관없었다.

그러면 try 안에 3개의 try가 생기는데, try문을 이렇게 중첩해서 계속 사용하는 거 보다
하나의 try안에 사용하는 것이 좋다고 들었어서 구현 생각부터 되게 힘들었다.

그래서 그렇게 구현을 했고, 구현한 뒤 동기 몇 분에게 물어봤었는데

단순하게 jsonresponse를 해주면 되는 문제여서 새롭게 다시 시작하게 되었다..

역시 난 멍청한갑다..


2. 구현


2-1. urls.py

from django.urls import path
from users.views import *

#localhost:8000/users
urlpatterns = [
   path('signup', SignupView.as_view())
]

2-2. views.py

from django.views import View
from django.http  import JsonResponse
from users.models import Users

import json, re

class SignupView(View) :

    def post(self, request) :
    #email / password / name / telephone / birthday(단, 생일은 필수값 아님)
        data = json.loads(request.body)

        try :

            email     = data.get('email',None)
            password  = data.get('password', None)
            birthday  = data.get('birthday',None)

            if not email or not password :

                return JsonResponse({'message':'KEY_ERROR'}, status=400)
            
            if email :
                if not re.match('^[\w+-\_.]+@[\w]+\.[\w]+$', email) :
                    return JsonResponse({'ValidationError':'이메일은 @ 와 . 이 형식에 맞게 순서대로 들어가야 합니다.'}, status=400)

                if Users.objects.filter(email=email).exists() :
                    return JsonResponse({'message':'기존재 이메일입니다.'}, status=400)

            if password :
                if not re.match('^(?=.*[a-zA-Z])(?=.*[0-9])(?=.*[!@#$%^&*()_+=-])[a-zA-Z0-9!@#$%^&*()_+=-]{8,}$', password) :
                    return JsonResponse({'ValidationError':'비밀번호에는 숫자/문자/특수문자가 1개씩 들어가야 합니다.'}, status=400)

            Users.objects.create(
                email     = email,
                password  = password,
                name      = data['name'],
                telephone = data['telephone'],
                birthday  = birthday
            )

            return JsonResponse({'mesage':'SUCCESS'},status=201)
        
        except Exception as msg :
            return JsonResponse({'message':msg}, status=400)

3. 멘토님 피드백


4. 최종

을 하기 전, 클래스의 경우 단수명으로 하는 것이 국룰이라 하여 Users->User로 변경하였다.


4-1. urls.py

from django.urls import path
from users.views import SignupView

urlpatterns = [
    path('signup', SignupView.as_view())
]

4-2. views.py

import json
import re

from django.views import View
from django.http  import JsonResponse
from users.models import User

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

        try :
            email     = data.get('email',    None)
            password  = data.get('password', None)
            birthday  = data.get('birthday', None)

            if not email  :
                return JsonResponse({'message':'KEY_ERROR BY EMAIL'}, status=400)

            if not password :
                return JsonResponse({'message':'KEY_ERROR BY PASSWORD'}, status=400)  
            
            if email :
                if not re.match('^[\w+-\_.]+@[\w]+\.[\w]+$', email) :
                    return JsonResponse({'message':'이메일은 @ 와 . 이 형식에 맞게 순서대로 들어가야 합니다.'}, status=400)

                if User.objects.filter(email=email).exists() :
                    return JsonResponse({'message':'기존재 이메일입니다.'}, status=400)

            if password :
                if not re.match('^(?=.*[a-zA-Z])(?=.*[0-9])(?=.*[!@#$%^&*()_+=-])[a-zA-Z0-9!@#$%^&*()_+=-]{8,}$', password) :
                    return JsonResponse({'message':'비밀번호에는 숫자/문자/특수문자가 1개씩 들어가야 합니다.'}, status=400)

            User.objects.create(
                email     = email,
                password  = password,
                name      = data['name'],
                telephone = data['telephone'],
                birthday  = birthday
            )

            return JsonResponse({'mesage':'SUCCESS'},status=201)
        
        except Exception as msg :
            return JsonResponse({'message':msg}, status=400)

5. 후기

if문이면 쉽게 할 수 있는 걸 왜 try-except를 쓰려 했던가;;

확실히 코드리뷰를 받으면서 코드가 깔끔해지는 게 느껴지는듯

profile
ISTJ인 K-개발자

0개의 댓글