[Westagram]#3 회원가입 기능 구현

Jimin_Note·2022년 6월 13일
0

🫐westagram

목록 보기
3/4
post-thumbnail

🌱 회원가입 기능 구현

  • 이메일이나 패스워드가 전달되지 않을 경우
    {"message": "KEY_ERROR"}, status code 400 반환
  • Email validation - 이메일에는 @.이 필수로 포함(조건이 만족되지 않은 경우 에러 반환)
  • Password Validation - 비밀번호는 8자리 이상, 문자, 숫자, 특수문자의 복합(해당 조건이 만족되지 않은 경우 에러반환)
  • 회원가입시 유저끼리 이메일이 중복되면 안되면 에러 반환
    *회원가입이 성공하면 {"message": "SUCCESS"}, status code 201 반환

🌱URLconf 정의

westagram/ursl.py

from django.urls import path, include

urlpatterns = [
    path('users',include('users.urls'))
]

users/urls.py : 파일생성해야함

from django.urls     import path
from users.views     import SignUpView

urlpatterns = [
    path('/signup', SignUpView.as_view()),
    
]

🌱view.py

import json
import re

from django.http     import JsonResponse
from django.views    import View

from users.models    import User


class SignUpView(View):
    def post(self, request):
        try :
             data         = json.loads(request.body)
             email        = data['email']
             password     = data['password']
             phone_number = data['phone_number']
             first_name   = data['first_name']
             last_name    = data['last_name']
             
             REGEX_EMAIL        = '^[a-zA-Z0-9+-_.]+@[a-zA-Z0-9_-]+\.[a-zA-Z0-9-.]+$' #(소문자 a~z, 대문자 A~Z, 숫자 0~9, +-_.) + @ + .
             REGEX_PASWWORD   = '^(?=.*[A-Za-z])(?=.*\d)(?=.*[$@$!%*#?&])[A-Za-z\d$@$!%*#?&]{8,25}$' #최소 한개의 영문자, 숫자, 특수 문자 + 8자~25자
             REGEX_PHONE_NUMBER = '\d{3}-\d{4}-\d{4}' #010-0000-0000 형식
             REGEX_LAST_NAME='^[a-zA-Z가-힣]+$'
             REGEX_FIRST_NAME='^[a-zA-Z가-힣]+$'
             
             if not re.match(REGEX_EMAIL,email):
                 return JsonResponse({'message' : 'INVALID_EMAIL'}, status = 400) #이메일 규칙 에러
             
             if not re.match(REGEX_PASWWORD,password):
                 return JsonResponse({'message' : 'INVALID_PASSWORD'}, status = 400) #비밀번호 규칙 에러
             
             if not re.match(REGEX_PHONE_NUMBER,phone_number):
                 return JsonResponse({'message' : 'INVALID_PHONE_NUMBER'}, status = 400) #휴대폰번호 형식 에러
             
             if User.objects.filter(email=email).exists():
                 return JsonResponse({'message':'DUPLICATE_EMAIL'}, status=400) #이메일 중복에러
                 
             if not re.match(REGEX_LAST_NAME,last_name):
                 return JsonResponse({'message' : 'INVALID_LAST_NAME'}, status = 400) #영어,한글을 제외한 문자가 들어가면 에러 반환
             
             if not re.match(REGEX_FIRST_NAME,first_name):
                 return JsonResponse({'message' : 'INVALID_LAST_NAME'}, status = 400) #영어,한글을 제외한 문자가 들어가면 에러 반환
                 
             User.objects.create(
                first_name    = data['first_name'],
                last_name     = data['last_name'],
                email         = data['email'],
                password      = data['password'],
                phone_number  = data['phone_number'],
            )
             
             return JsonResponse({'message' : 'SUCCESS'}, status=201)
        except KeyError: #값이 하나도 안들어오면
             return JsonResponse({'message' : 'KEY_ERROR'}, status=400)
profile
Hello. I'm jimin:)

0개의 댓글