TIL #9 [Django] Westagram 회원가입 구현

ahn__jh·2021년 4월 5일
0

모델 우선 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)

로그인 만들기 전에 생각으로 로직을 구성을 했을 땐 쉬워보였으나 역시 뚜들겨 맞기 전 까지는 쉬운게 없었다.

0개의 댓글