<HOXY LUSH? (4)>

On a regular basis·2021년 5월 17일
0

Project_HOXYLUSH?

목록 보기
4/6
post-thumbnail

🦖 1차 프로젝트 <HOXY LUSH?> 🦖

🐳 오늘 프로젝트 하면서 배운 것(1) 🐳

-> 회원가입&로그인 코드: 내가 구현한 건 SignUpVieww만!

  1. 회원가입과 로그인은 사용자가 요청을 보내는 st 이기 때문에 post 메쏘드를 쓴다! 제이슨을 통해 바디에 데이터를 담아 받고 보낸다.

  2. 따로 유효성 검사를 validator.py를 만들어서 import해주려고 했는데 그냥 회원가입안에 유효성 검사를 넣어주었다. 프론트랑 유효성검사 코드 확인은 필수! 어떤 조건을 걸어주었는지 프론트에 먼저 얘기해주기!

  3. bcrypt를 활용해서 비밀번호를 해쉬화해주었다. encode 시키고, 다시 decode까지! 이 코드는 외워버렸는데 아주 뿌듯스 👌🏽

  4. 마지막으로, 초안을 작성할 때는 create안에 값을 다 따로 써주었었는데, 최종본에서 한번에 괄호로 열어서 다 넣어주니 훨씬 가독성이 올라간다.

🐼 회원가입 & 로그인 🐼

import json
import bcrypt
import jwt
import re

from django.views         import View
from django.http          import JsonResponse
from json.decoder         import JSONDecodeError

from users.models import User
from my_settings  import SECRET_KEY, ALGORITHM

class SignUpView(View):
    def post(self, request):
        try:
            data         = json.loads(request.body)
            account      = data["account"]
            password     = data["password"]
            email        = data["email"]
            phone_number = data["phone_number"]
            nickname     = data.get("nickname")
            address      = data.get("address")

            email_validation    = re.compile('^[a-z0-9]+@[a-z0-9]+\.[a-z0-9.]+$', re.I)
            password_validation = re.compile('^(?=.*[a-z])(?=.*[0-9]).{8,}', re.I)

            if not email_validation.match(email):
                return JsonResponse({"MESSAGE" : "INVALID_EMAIL"}, status=400)

            if not password_validation.match(password):
                return JsonResponse({"MESSAGE" : "INVALID_PASSWORD"}, status=400)
           
            if User.objects.filter(phone_number=data.get('phone_number')).exists() and data.get('phone_number') != None:
                return JsonResponse({'MESSAGE': 'ALREADY_EXISTS'}, status = 400)

            if User.objects.filter(nickname=data.get('nickname')).exists()\
                and data.get('nickname') != None:
                return JsonResponse({'MESSAGE' : 'ALREADY_EXISTS'}, status = 400)

            hashed_password= bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt()).decode("utf-8")

            User.objects.create(
                account      = account,
                password     = hashed_password,
                email        = email,
                phone_number = phone_number,
                nickname     = nickname,
                address      = address
                )
            return JsonResponse({"MESSAGE" : "SUCCESS"}, status = 201)

        except KeyError:
            return JsonResponse({"MESSAGE" : "KEY_ERROR"}, status = 400)

class LogInView(View):
    def post(self, request):
        try:
            data = json.loads(request.body)
            user = User.objects.get(account=data["account"])
            hashed_password = user.password.encode("utf-8")

            if not bcrypt.checkpw(data["password"].encode("utf-8"), hashed_password):
                return JsonResponse({"MESSAGE":"INVALID_USER"}, status=401)

            access_token = jwt.encode({"account" : user.id}, SECRET_KEY, algorithm = ALGORITHM)

            return JsonResponse({"MESSAGE":"SUCCESS", "ACCESS_TOKEN": access_token}, status=200)
        
        except json.JSONDecodeError:
            return JsonResponse({"MESSAGE": "KEY_ERROR"}, status=404) 
        
        except User.DoesNotExist:
            return JsonResponse({"MESSAGE": "INVALID_USER"}, status=404)
        
        except KeyError:
            return JsonResponse({"MESSAGE" : "KEY_ERROR"}, status=400)

🐳 오늘 프로젝트 하면서 배운 것(2) 🐳

  1. git commit 메시지
    git commit (TEMPLATE에 맞춰서!)
  • Add - 레이아웃 / 기능 추가
  • Remove - 내용 삭제 (폴더 / 파일 삭제)
  • Modify - 수정 (JSON 데이터 포맷 변경 / 버튼 색깔 변경 / 폰트 변경)
  • Fix - 버그/오류 해결
  • Refactor - 코드 리팩토링 (멘토 리뷰 반영 / 스스로 리팩토링 / 중복 코드 제거 / 불필요 코드 제거 / 성능 개선
🥲 예시 
🥲 분류: 한줄 제목
	- 구현내용 detail
	- 구현내용 detail
🥲 Add: User app 생성 및 회원가입 엔드포인트 추가
- 유저 앱을 만들고, 유저 모델 클래스 생성
- 회원가입 엔드포인트 구현
  1. git hub!

😇 깃헙 익숙하게하기,
git add .
git commit (여기서 커밋메시지 들어가서 써주고 :wq!)
git log
git status
git push origin feature/signup-login
(요기서 signup-login은 미리 만들어둔 브랜치 제목)
(git push할때는 manage.py있는 곳에서 commit+push)
(push하기전에는 pull 모두 다 받기)

😇 멘토님 ok merge나면,
git checkout main (메인으로 먼저가서!)
git pull origin main (메인으로 풀받아오기!)
git branch (name) 새로운 브랜치 하나 파서 시작하기! (브렌치는 메인에 만들자)

😇 pull은 github 메인과 내 local메인사이에서 가능
pull받은 내 local메인의 업데이트 내용을 내 branch에서도 적용해주기 위해서 merge를 시켜주면 됨(in 브렌치, git merge main)

😇 pull받아오면,

  • makemigration, migrate, runserver까지 모두 구동해보기!
  • my settings.py 확인, database 이름도 확인!

😇 혹시 안깔려있으면!
pip install django
pip install client
pip install django-cors-headers

🐳 요즘 느끼는 것! 🐳

  1. 기분이 태도가 되게 하지 않는 것. 말로는 너무 쉬운데 몸 힘들고 예민해지니까 기분이 태도가 되어버린다. 예민해질 때는 자리를 잠깐 피하거나 한 번더 생각하고 입밖으로 말 꺼내기.
  2. 하나를 알더라도 정확하게 알고 가는 것이 너무 중요하다는 걸 느낀다. 어줍잖게 아는 것보다 쉽고 단순한 것이라도 내 것으로 철저하게 만드는게 중요하다. 그런 의미에서 이번 프로젝트에서는 초기세팅&회원가입&로그인&제품세부사항을 마스터하고, 깃헙에 익숙하게 하는게 목표다!!!😍
  3. 모든 것에 장점과 단점이 있다. 장점을 보면서 감사함을 배우고 단점을 보면서 주의하고 더 조심스럽게 행동하게 된다. 지금 위코드에서 하고 있는 모든 것이 쉽지마는 않다. 요즘 프로젝트 짝꿍인 경래님말을 빌리자면 나는 정말로 찐 슬로우스타터인 것 같다. 조금 더디더라도 꼼꼼하게 하나씩 채우면서 가야겠다는 생각이 든다. 1초 1초 더 힘내서 버텨내야지!🍔
  4. 왜케 좋은 사람들만 내 옆에 그득한지. 정말 감사하고 또 미안하다. 소중한 마음들을 감사하게 받고 예쁘게 전달하는 사람이 되고 싶다! 1차 프로젝트 무사히 끝내길!🍍
profile
개발 기록

0개의 댓글