try-except문이 굉장히 많을 것 같아 혼란스러웠다.
첫 번째로 이메일-패스워드가 전달 안 될 시, except KEYERROR
두 번째로 이메일에 대한 except ValidationError
세 번째로 비밀번호에 대한 except ValidationError
이메일 중복이야 exists()를 이용하여 리턴해주면 되니까 상관없었다.
그러면 try 안에 3개의 try가 생기는데, try문을 이렇게 중첩해서 계속 사용하는 거 보다
하나의 try안에 사용하는 것이 좋다고 들었어서 구현 생각부터 되게 힘들었다.
그래서 그렇게 구현을 했고, 구현한 뒤 동기 몇 분에게 물어봤었는데
단순하게 jsonresponse를 해주면 되는 문제여서 새롭게 다시 시작하게 되었다..
역시 난 멍청한갑다..
from django.urls import path
from users.views import *
#localhost:8000/users
urlpatterns = [
path('signup', SignupView.as_view())
]
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)
을 하기 전, 클래스의 경우 단수명으로 하는 것이 국룰이라 하여 Users->User로 변경하였다.
from django.urls import path
from users.views import SignupView
urlpatterns = [
path('signup', SignupView.as_view())
]
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)
if문이면 쉽게 할 수 있는 걸 왜 try-except를 쓰려 했던가;;
확실히 코드리뷰를 받으면서 코드가 깔끔해지는 게 느껴지는듯