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