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)