Django : Westagram #3 회원가입 정규식 모듈화
회원가입 정규식 모듈화
기존 전체 코드에 정규식에 관한 조건문이나 변수를 validation.py파일을 생성하여 모듈화 진행
class SignUpView(View):
def post(self, request):
try:
data = json.loads(request.body)
name = data["name"]
email = data['email']
password = data["password"]
phone = data["phone"]
email_regex = '^([a-z0-9_\.-]+)@([\da-z\.-]+)\.([a-z\.]{2,6})$'
passwd_regex = '^(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9]).{8,}$'
if User.objects.filter(email=email).exists():
return JsonResponse({"message" : "EMAIL_ALREADY_EXISTS"}, status=400)
if not re.match(email_regex, email):
return JsonResponse({"message": "EMAIL_ERROR"}, status=400)
if not re.match(passwd_regex, password):
return JsonResponse({"message": "PASSWORD_ERROR"}, status=400)
User.objects.create(
name = name,
email = email,
passwd = password,
phone = phone
)
return JsonResponse({"message": "Success"}, status = 201)
except KeyError:
return JsonResponse({"message": "KEY_ERROR"}, status=400)
모듈 만들기
touch validation.py 생성 및 전체 코드에서 정규식에 관련된 조건문이나 변수를 가지고 온다.
validation.py
email_regex = '^([a-z0-9_\.-]+)@([\da-z\.-]+)\.([a-z\.]{2,6})$'
passwd_regex = '^(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9]).{8,}$'
if not re.match(email_regex, email):
return JsonResponse({"message": "EMAIL_ERROR"}, status=400)
if not re.match(passwd_regex, password):
return JsonResponse({"message": "PASSWORD_ERROR"}, status=400)
이메일과 패스워드를 한번에 관리해도 괜찮지만 따로 관리해주게 사후 관리에 좋기때문에 분리한다.
email_regex = '^([a-z0-9_\.-]+)@([\da-z\.-]+)\.([a-z\.]{2,6})$'
if not re.match(email_regex, email):
return JsonResponse({"message": "EMAIL_ERROR"}, status=400)
passwd_regex = '^(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9]).{8,}$'
if not re.match(passwd_regex, password):
return JsonResponse({"message": "PASSWORD_ERROR"}, status=400)
함수를 만들고 각자 필요한 값을 인자로 받는다
return 대신 raise ValidationError로 인스턴스에러를 표시한다.
from django.core.exceptions import ValidationError
def signup_email(email):
email_regex = '^([a-z0-9_\.-]+)@([\da-z\.-]+)\.([a-z\.]{2,6})$'
if not re.match(email_regex, email):
raise ValidationError("EMAIL_ERROR")
def signup_password(password):
passwd_regex = '^(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9]).{8,}$'
if not re.match(passwd_regex, password):
raise ValidationError("PASSWORD_ERROR")
모듈 적용
정규식 검사는 모듈에 있는 함수를 불러와 진행하고 에러 처리는 ValidationError를 바라보게 해준다.
from .validation import signup_password, signup_email
from django.core.exceptions import ValidationError
def post(self, request):
try:
data = json.loads(request.body)
name = data["name"]
email = data['email']
password = data["password"]
phone = data["phone"]
# validation.py에 있는 함수로 처리
signup_email(email)
signup_password(password)
if User.objects.filter(email=email).exists():
return JsonResponse({"message" : "EMAIL_ALREADY_EXISTS"}, status=400)
User.objects.create(
name = name,
email = email,
password = hashed_password,
phone = phone
)
return JsonResponse({"message": "Success"}, status = 201)
except KeyError:
return JsonResponse({"message": "KEY_ERROR"}, status=400)
#에러 처러
except ValidationError as e:
return JsonResponse({"message": e.message}, status=400)
Author And Source
이 문제에 관하여(Django : Westagram #3 회원가입 정규식 모듈화), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@jincastle/Django-Westagram-3-회원가입-정규식-모듈화저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)