<회원가입 flow>
1. 클라이언트가 자신의 정보를 body에 담아서 request를 보낸다.
2. 이메일 형식이 맞는지 확인한다.
3. 이메일이 이미 존재 하는지 그 여부를 확인한다.
4. 비밀번호가 지정한 길이보다 더 긴지 확인한다.
5. 비밀번호를 암호화한다.
6. 필수로 들어가야 할 요소들이 들어가지 않은 경우 KEY ERROR를 발생시킨다.
import json
from django.http import JsonResponse
from django.views import View
from user.models import User
class SignupView(View):
def post(self, request):
PASSWORD_LENGTH = 8
try:
data = json.loads(request.body)
if '@' not in data['email'] or '.' not in data['email']:
return JsonResponse({'MESSGAGE': 'INVALID EMAIL'}, status=400)
if User.objects.filter(email=data['email']).exists():
return JsonResponse({'MESSGAGE': 'DUPLICATED EMAIL'}, status=400)
if User.objects.filter(nickname=data['nickname']).exists():
return JsonResponse({'MESSGAGE': 'ALREADY USED'}, status=400)
if len(data['password']) <= PASSWORD_LENGTH:
return JsonResponse({'MESSGAGE': 'INVALID PASSWORD'}, status=400)
hashed_password = bcrypt.hashpw(data['password'].encode('utf-8'), bcrypt.gensalt())
decode_hash_pw = hashed_password.decode('utf-8')
User.objects.create(
email = data['email'],
nickname = data.get('nickname','default'),
name = data['name'],
phone_number = data['phone_number'],
password = decode_hash_pw
)
return JsonResponse({'MESSAGE': 'SUCCESS'}, status=201)
except KeyError:
return JsonResponse({'MESSAGE': 'KEYERROR'}, status=400)
상수명은 PASSWORD_LENGTH
은 대문자로 적어주는 것이 좋다.
비밀번호 길이를 확인할때 상수를 안쓰고 바로 숫자를 쓰면 나중에 유지보수 할때 좋지 않다.
.filter(칼럼명='찾고싶은 거') (2개이상 찾을 수 있다.)
딕셔너리.get(key, value)
key: 찾고자 하는 것
value(optional): key가 없을 경우 value가 리턴된다. default value는 None이다.
가독성을 위해서 불필요한 elif와 if를 과도하게 중첨해서 사용하지 않는게 좋다.
에러메시지는 프론트가 보는 것이기 때문에 불필요하게 친절하고 길게 할 필요가 없고, 메시지 형식은 통일 시키는 것이 좋다.
except를 맨 밑에 두는게 가독성에 좋다.
and와 or은 조건과 조건을 비교하는 것
if '@' not in data['email'] or '.' not in data['email']:
if 'a' or ',' not in data['email']:
처음에는 아래줄처럼 넣었었는데, 저 구문을 풀어서 설명해보면
'@' 또는 '.'이 이메일 데이터에 없다면
이 되고,
윗줄을 풀어서 설명하면
@가 이메일 데이터에 없고, .이 이메일 데이터에 없다면
이 된다.
즉, @,. 각각이 이메일에 있는지 없는지를 확인해야 하는것..!