TIL#9[Django]Westagram会員制を実施
まず携帯電話番号と電子メールのどちらかを電子メールで入力しても参加できます.
モデリングコードは次のとおりです
一つの入力IDで電子メールで登録するか、ユーザー名で登録するか、携帯電話番号で登録するかに分けて、ちょっと複雑になります.
モデリングコードは次のとおりです
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)
ログインを作成する前に、アイデアで論理を構築するのは簡単に見えますが、叩かれる前に、簡単なことはありません.Reference
この問題について(TIL#9[Django]Westagram会員制を実施), 我々は、より多くの情報をここで見つけました https://velog.io/@tgrf07/TIL-9-Django-Westagram-회원가입-구현テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol