모델 우선 email로 핸드폰번호 와 이메일로 둘중 하나로 입력해도 가입할 수 있게 모델링을 해봤다.
아래는 모델링 코드
class User(models.Model):
email = models.CharField(max_length=200)
password = models.CharField(max_length=200)
name = models.CharField(max_length=200)
nickname = models.CharField(max_length=200)
class Meta:
db_table = 'users'
views 파일
class UserView(View):
def post(self, request):
data = json.loads(request.body)
id_1 = data['email']
input2 = data['password']
nickname = data['nickname']
phone_check = re.compile('^[0-9]{3}[0-9]{3,4}[0-9]{4}')
email_check = re.compile('^[0-9a-zA-Z]([-_.]?[0-9a-zA-Z])*@[0-9a-zA-Z]([-_.]?[0-9a-zA-Z])*.[a-zA-Z]{2,3}$') # 정규식을 이용해 이메일형식인지 핸드폰형식인지 구분함
if len(id_1) <= 0 or len(input2) == 0 :
return JsonResponse({'message':'KEY_ERROR'}, status=400) #ID, PW 값이 없을시 KEY_error 반환
if not email_check.match(id_1) and not phone_check.match(id_1):
return JsonResponse({'message':'Invaild ID_ERROR'}, status=400) #ID형식이 이메일,핸드폰번호 형식이 아니면 ID에러반환
if len(input2) < 8:
return JsonResponse({'message':'Invaild PW_Error'}, status=400) #PW가 8글자 미만일시 PW에러 반환
if User.objects.filter(nickname=nickname):
return JsonResponse({'message':'Nickname Duplicate_Error'}, status=400) #사용자이름(nickname)이 중복일시 사용자이름 중복에러 반환
if User.objects.filter(email=id_1):
return JsonResponse({'message':'ID Duplicate_Error'}, status=400) #ID가 중복일시 ID중복 에러 반환
User.objects.create(
email = data['email'],
password= data['password'],
nickname= data['nickname'],
name = data['name'])
return JsonResponse({'message':'SUCCESS'}, status=200) #예외처리후 정상이면 회원가입 완료
회원가입까진 로그인 아이디를 한개로해서 만들었으나 로그인 할 때 서버로 ID,PW를 DB에 없는 값을 전송하면 500서버 에러가 발생한다 ㅜㅜ 오늘은 왜그런지 확인해보고 수정해야겠다.
입력받은 ID하나로 이메일형식으로 로그인하는지 사용자이름으로 로그인하는지 핸드폰 번호 형식으로 로그인하는지 나누려고 하니 좀 복잡해져 버렸다.
class LoginView(View):
def post(self,request):
data = json.loads(request.body)
id_1 = data['email']
input2 = data['password']
email_check = re.compile('^[0-9a-zA-Z]([-_.]?[0-9a-zA-Z])*@[0-9a-zA-Z]([-_.]?[0-9a-zA-Z])*.[a-zA-Z]{2,3}$')
phone_check = re.compile('^[0-9]{3}[0-9]{3,4}[0-9]{4}')
if len(id_1) == 0 or len(input2) == 0:
return JsonResponse({'message':'KEY_ERROR'}, status = 400)
if email_check.match(id_1):
if User.objects.get(email=id_1) and User.objects.filter(password=input2):
return JsonResponse({'message':'LOGIN SUCCESS'}, status = 200)
if phone_check.match(id_1):
if User.objects.get(email=id_1) and User.objects.filter(password=input2):
return JsonResponse({'message':'LOGIN SUCCESS'}, status = 200)
if User.objects.get(nickname=id_1):
if User.objects.filter(password=input2):
return JsonResponse({'message':'LOGIN SUCCESS'}, status = 200)
if User.objects.get()
return JsonResponse({'message':'IVALID_USER'}, status = 400)
로그인 만들기 전에 생각으로 로직을 구성을 했을 땐 쉬워보였으나 역시 뚜들겨 맞기 전 까지는 쉬운게 없었다.