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

제갈창민·2021년 12월 2일
0

learningbook

목록 보기
24/32

1. 회원가입 + validation.py

import json

from django.views           import View
from django.http            import JsonResponse
from django.db              import IntegrityError
from django.core.exceptions import ValidationError

from users.models           import User
from users.validation       import validate_check

class SignUpView(View):
    def post(self, request):

        data = json.loads(request.body)

        try:
            data           = json.loads(request.body)
            user_name      = data['name']
            user_email     = data['email']
            user_password  = data['password']
            user_phone     = data['phone']
            
            user_create     = User(
                name        = user_name,
                email       = user_email,
                password    = user_password,
                phone       = user_phone,
            )

            validate_check(
                user_email,
                user_password,
            )

            user_create.full_clean()
            user_create.save()
        
            return JsonResponse({'message':'SUCCESS'}, status=201)

        except IntegrityError:
            return JsonResponse({'message':'Duplicated Email exists'}, status=401)

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

        except ValidationError as e: 
            return JsonResponse({'message':e.messages}, status=400)

-> except ValidationError as e:
= ({'message': e.(여러가지 속성들이 존재함), status=()})
= 여러가지 속성들을 이용해서 다양한 형태의 에러 메세지나 정보들을 확인할 수 있다.
= validation.py 에서 raise 로 다수의 조건으로 나누어진 ValidationError 를 설정할 때, 각각의 메세지를 Json 형태로 확인하려면 'as e:' 와 'e.()' 를 사용하면 된다.
= shell 에서 다음과 같이 연습해 볼 수 있다.

try:
	raise ValidationError('asdf')
 	except ValidationError as e: 

* print(e.__dir__())   <-- 'dir''e.' 가  가진 모든 속성을 나열한다

-> 이와 같이, 예상할 수 있는 특정한 에러들은 models.py에서도 미리 설정하여 views.py를 좀 더 깔끔하게 구성해 볼 수 있다.

--> IntegrityError 는 DB와 관련된 에러였다..; 무지성 구글링의 폐해라고 볼 수 있겠다. 이후 except문을 삭제하고 if 문을 추가하여 중복 이메일 검사를 할 수 있도록 적용했다.

class SignInView(View):
    def post(self, request):

        try:
            data          = json.loads(request.body)
            user_email    = data['email']
            user_password = data['password']

            if not User.objects.filter(email=user_email, password=user_password).exists():
                return JsonResponse({'message':'INVALID_USER'}, status=401)
            
            return JsonResponse({'message':'SUCCESS'}, status=200)

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


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

0개의 댓글