
import json
import re
from django.http        import JsonResponse
from django.views       import View
from user.models        import User
# sign up
class Signup(View):
    def post(self, request):
        try:
            data        = json.loads(request.body)
            if data.get('user_name') is not None:
                if data.get('password') is not None:
                    if User.objects.filter(user_name=data['user_name']).count() > 0:
                        return JsonResponse({'message':'DUPLICATED_USERNAME'}, status=400)
                    if re.search('[0-9]+', data['password']) is None:
                        return JsonResponse({'message':'TOO_SHORT_PW'}, status=400)
                    User.objects.create(
                        user_name   = data['user_name'],
                        password    = data['password']
                    )
                    return JsonResponse({'message':'SUCCESS'}, status=200)
                else:
                    return JsonResponse({'message':'KEY_ERROR'}, status=400)
            else:
                return JsonResponse({'message':'KEY_ERROR'}, status=400)
        except:
            return JsonResponse({'message':'KEY_ERROR'}, status=400)
# sign in
class Signin(View):
    def post(self, request):
        data = json.loads(request.body)
        try:
            user_count = User.objects.filter(user_name=data['user_name']).count()
            signin_check = User.objects.get(user_name=data['user_name'])
            if user_count == 1:
                if signin_check.user_name == data['user_name'] and signin_check.password == data['password']:
                    return JsonResponse({'message':'SUCCESS'}, status=200)
            else:
                return JsonResponse({'message':'INVALID_USER'}, status=401)    
        except:
            return JsonResponse({'message':'INVALID_USER'}, status=401)
생각이 너무 많았던 회원가입, 로그인 기능 구현하기
문제가 계정명, 핸드폰번호, 이메일 중 한가지만 택해서 id 개념으로 쓸 수 있다는 것이었는데
세가지 모두를 받되 하나만 id로 사용하겠다는 줄 알고
DB Users테이블의 컬럼을 총 네개로 해야하나..?(password 컬럼 포함)
아니면 한 컬럼내에 모두 받되 type을 가르는 컬럼을 하나 추가해서 어떠한 종류의 id인지 분간할 것인가..?
그럼 id로 쓰려는것을 아무것도 받지 않으면..?
근데 애초에 front단에서 뭐가 되었든 form 안에 담겨서 넘어올 것 같은데 
과연 아무 값도 존재하지 않을수가 있나?
value가 없을 뿐 key는 어떻게든 넘어오지 않나?
혼자서 삽질에 삽질👆🏻 을 계속 하고
migrate 에러도 또 내보고(...!!!!)
이번엔 두번째 사고치는거라 오히려 migrate에러는 금방 해결했다.
- 한번에 천천히 수정사항이 반영되도록 해야하는데 models.py에서 클래스 명까지 수정해버렸더니, 해당 테이블을 찾을 수 없다고 에러가 나버리고,
 - 이미 클래스명과 일치하는 테이블은 매칭되지 않는 상태에서 migrate할 내역이 없다는 에러만 계속 뜨는 것..!!!
 
👉🏻 차분하게 migration 파일 내 delete 구간을 지워보기도 하고 난리를 다 쳤는데,
결국 migration 파일 내부를 싹 지우고 migrate 해서 테이블을 없앤 뒤
다시 작성하고 migrate해주면 과정을 차분히^^ 진행할 수 있었다.
뭐든지 천천히..^^
아무튼, 결국 컬럼을 하나로 진행하기로 했다. (그냥 계정명만 입력받는다고 가정!)
입력받은 id 값과 pw 값 유효성 검사를 진행한 뒤, 유효성 검사에서 걸리지 않는다면
DB 내에 저장되도록 구현했다. 
filter( )메서드를 쓰면<QuerySet>으로 리턴되고,get( )메서드를 쓰면 model 내 해당 테이블을 구성하는class가 리턴되었다.
👉🏻중복되는 id가 있는지 확인하고싶었기에, 그 길이를 셀셀 수 있는filter().count()메서드를 사용해서
길이가 1이상인 경우 500 status를 반환하도록 했다.
비밀번호 검사도 원래는 8개 이상이면 무조건 통과를 하기로했는데, 정규식을 써보라고 해서
숫자가 꼭 들어가야 하며 8개 이상인 경우로 수정하였다. 
파이썬은 정규식을 위한
re라는module이 존재한다
해당 모듈을 import 해서 함수 사용하면 되는 것!
DB에서 get 메서드를 사용해서 입력받은 id와 일치하는 것이 있는지 확인 한 후
겹친다면 비밀번호도 검사하도록 한다. 
둘 다 일치한다면 로그인 성공! 그렇지 않다면 예외상황을 리턴해주기로 했다.
이렇게
get()메서드를 사용해서 한번에 여러가지 field 값들과 대조해 볼 수 있다.
쉽게쉽게 생각하자..!
from django.urls import path
from user.views import Signup, Signin
urlpatterns = [
    path ('/signup', Signup.as_view()),
    path ('/signin', Signin.as_view()),
]
작업 초기에 class형view(**CBV**)와 함수형 뷰(**FBV**)의 차이를 몰라서 도저히 작업을 할 수 없었다.
view 내에 두 형식의 view를 혼합해서 사용한 것!
그 결과, 메서드가 self, request를 동시에 매개변수로 못받는 상황이 발생했다. 
그리고 그 때에는 urls.py도 각 기능에 따른 url마다
클래스 자체를 import 해준 뒤 메서드를 직접 선언해서 사용하려 했다. 
알고보니 클래스명.메서드명으로 바로 urls.py에서 선언해서 사용하는 것은 FBV!
그리고 내가 실습 중이었던 것은 CBV!
내 마음대로 함수명을 지정하면 안된다.
CBV는 HTTP 메서드를 기반으로 구현되어있기 때문..!! 
** View에 대한 기본 개념을 좀 공부할 필요가 있다.😭😭