TIL#9[Django]Westagram会員制を実施


まず携帯電話番号と電子メールのどちらかを電子メールで入力しても参加できます.
モデリングコードは次のとおりです
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) 				#예외처리후 정상이면 회원가입 완료
会員までは1つのログイン名で作成されていますが、ログイン時に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)
ログインを作成する前に、アイデアで論理を構築するのは簡単に見えますが、叩かれる前に、簡単なことはありません.