[Westagram] -3

김가람휘·2022년 2월 23일
0

Westagram

목록 보기
3/9

[Mission 3] 회원가입 기능 구현

1. 회원가입 View 기능 정의

# users/validation.py
import re

# @와 .을 필수로 포함해야 합니다.
def validate_email(email):
    email_regex = '^[a-zA-Z0-9+-_.]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$'
    if not re.match(email_regex, email):
        return False

# 최소 8 글자 이상, 최소 한 개의 영문과 숫자 그리고 특수 문자를 포함해야 합니다.
def validate_password(password):
    password_regex = '^(?=.*[A-Za-z])(?=.*\d)(?=.*[$@$!%*#?&])[A-Za-z\d$@$!%*#?&]{8,}$'
    if not re.match(password_regex, password):
        return False
# users/views.py
import json

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

from users.validation import validate_email, validate_password
from users.models     import User

class SignUpView(View):
    def post(self, request):
        data = json.loads(request.body)
        try:
            username = data['username']
            email    = data['email']
            password = data['password']
            contact  = data['contact']

            if validate_email(email) == False:
                return JsonResponse({'message':'INVALID EMAIL'}, status=400) 

            if validate_password(password) == False:
                return JsonResponse({'message':'INVALID PASSWORD'}, status=400) 

            if User.objects.filter(email = email).exists():
                return JsonResponse({'message':'EXISTING USER'}, status=400)
                
            User.objects.create(
                username = username,
                email    = email,
                password = password,
                contact  = contact,
            )
            
            return JsonResponse({'message':'SUCCESS'}, status=201) 
    
        except KeyError:
            return JsonResponse({'message' : 'KEY_ERROR'},status=400) 
if User.objects.filter(email = email).exists():
  • if문안에서 exists()를 사용하지 않아도 filter()는 조건에 맞는 레코드들을 반환하므로 True가 반환되지만 이는 속도도 느려지고 캐시도 낭비하는 방법이므로 exists()를 사용하여 해당 레코드가 존재하는지만 확인하는 방법이 더 효율적입니다.

2. URLconf 정의

# urls.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())
]

3. 회원가입 확인


0개의 댓글