[Django] 회원가입 및 로그인 ver.1

제갈창민·2021년 11월 30일
0

learningbook

목록 보기
23/32

1. 회원가입

class SignUpView(View):
    def post(self, request):
        signup_data = json.loads(request.body)

        try:
            if User.objects.filter(email=signup_data['email']).exists():
                return HttpResponse(status=409)
            
            User.objects.create(
                name=signup_data['name'],
                email=signup_data['email'],
                password=signup_data['password'],
                phone=signup_data['phone']
            )
            return HttpResponse(status=200)

        except KeyError:
            return JsonResponse({'message':'KEY_ERROR'}, status=400)

-> 이전에 실습하면서 만들었던 여러 자료들을 참고로 어찌저찌 구색을 갖춘 회원가입 views.py를 만들었다.
-> .filter().exists() 로 True, False 를 검사할 수 있다는것을 알았다.
-> (request.body) 가 어떤 의미를 갖고 있는지 몰랐는데, 나중에 FE에서 입력값을 보낼 때 그 값을 받는 곳이라고 한다.

2. 로그인

class SignUpView(View):
    def post(self, request):
        data            = json.loads(request.body)
        regex_email    = '[a-zA-Z0-9]+\.?\w*@\w+[.]?\w*[.]+\w{2,3}'
        regex_password = '(?=.*[A-Za-z])(?=.*\d)(?=.*[~!@#$^&*()+|=])[A-Za-z\d~!@#$%^&*()+|=]{8,}'

        try:
            # email과 password가 비어있는 경우
            if data['email'] == '' or data['password'] == '':
                return JsonResponse({'message':'Email or Password is Blank'}, status = 400)
            # email 중복된 경우   
            elif data['email'] in [i.email for i in User.objects.all()]:
                raise JsonResponse({'message' : 'Email Reduplication'}, status=400)
            # email과 password가 정규식과 불일치한 경우
            elif re.match(regex_email, data['email']) is None or re.match(regex_password, data['password']) is None:
                raise ValueError
        except ValueError:
            return JsonResponse({'message' : 'KEY_ERROR'}, status=400)
        else:
            User.objects.create(
                name        = data['name'],
                email       = data['email'],
                password    = data['password'],
                address     = data['address'],
                information = data['information']
            )
            return JsonResponse({'message':'SUCESS'},status=201)

-> 아직은 컨벤션을 신경쓰지않고 class 를 완성하는 것에 집중했다.
-> 정규표현식이 내가 보기엔 거의 상형문자 급이라 적어놓고 외워야할 것 같다.(적용한 정규표현식은 구글링 작품)
-> raise 로 Error를 일으켜서 except로 특정한 다음, 원하는 메세지로 출력하는 방법을 깨우친 것은 며칠 후의 이야기다.

Review

-> 초기 세팅과 git 사용은 충분히 숙지되어서 꽤 자신이 붙었다. 별다른 실수나 에러도 없이 무난히 git을 사용하고, 세팅도 막힘은 없었다.
-> 다만, view에서 2개의 class 를 만들었지만, 내 스스로의 지분은 5%도 안되는 것 같다.(구글 70%, 동기 25%)
-> git push 를 통해 멘토님들에게 수정사항 받는 것이 즐겁다. 컨벤션 관련 수정 사항은 줄여나가는 재미가 있었다.

profile
자기계발 중인 신입 개발자

0개의 댓글