model을 짜고 DB를 만들고 postman 사용 할 수 있게 되었다. 짧은 시간에 할 수 있는건 많아졌지만 정확하게 적재적소에 실수 없이 사용하는 것을 더 욱 연습해야 될 것 같다.
호준님 머지좀 해주세요ㅠㅠ
가상환경 생성 및 활성화
miniconda 사용법을 익히는게 포인트 인것 같다. (create, env list, activate, deactivate...)
프로젝트 초기 설정.
DB 만들때 많은 실수를 했다.(feat.호준 멘토님의 '거짓말') DB는 정보가 담기는 곳이기 때문에 설계부터 확실히 해야하며 DB안에 정보가 있는 상태에서 모델의 모양을 바꿀 수 있으나 잘못 만지게 되면 DB를 밀어버리는 경우가 허다하니 그런 일이 일어나지 않도록... 조심해야한다.
DB 4번 밀어버림ㅋ
코딩을 시작하면서 모든 과정이 정확한 순서로 이뤄져야한다는 것을 git과 github를 하게 되면서 많이 느끼게 되었다. 급한 성격인 나도 앞으로는 순서를 한번 생각하는 버릇을 들여야 겠다.
from django.db import models
class User(models.Model):
name = models.CharField(max_length=30)
email = models.EmailField(unique=True, max_length=245)
password = models.CharField(max_length=100)
phone = models.CharField(max_length=100)
date_of_birth = models.DateField()
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now= True)
class Meta:
db_table = "users"
import json , re , bcrypt , jwt
from django.http import JsonResponse
from django.views import View
from django.conf import settings
from .models import User
class SignUpView(View):
def post(self, request):
try:
data = json.loads(request.body)
name = data['name']
email = data['email']
password = data['password']
phone = data['phone']
date_of_birth = data['date_of_birth']
PASSWORD_CHECK = '^(?=.*[A-Za-z])(?=.*\d)(?=.*[$@$!%*#?&])[A-Za-z\d$@$!%*#?&]{8,}$'
EMAIL_CHECK = '^[a-zA-Z0-9+-_.]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$'
if User.objects.filter(email = email).exists():
return JsonResponse({"massage":"REGISTERED."}, status=401)
if not re.match(EMAIL_CHECK, email):
return JsonResponse({"massage":"INVALID_EMAIL."}, status=401)
if not re.match(PASSWORD_CHECK, password):
return JsonResponse({"massage":"INVALID_PASSWORD."}, status=401)
hashed_password = bcrypt.hashpw(password.encode('utf-8') , bcrypt.gensalt()).decode('utf-8')
User.objects.create(
name = name,
email = email,
password = hashed_password,
phone = phone,
date_of_birth = date_of_birth
)
return JsonResponse({'message':'SUCCESS'}, status=201)
except KeyError:
return JsonResponse({'message':'KEY_ERROR'}, status=401)
json, 정규식, bcrypt 등 여러가지 처음 보는 것들이 많았다. 하나하나 익히는 과정이 조금 버겁기는 했었다. 멘토님들은 컨벤션이나 깔끔한 코딩을 위해 많은 피드백을 남겨주셨다. filter 와 get에 대한 이해를 위해 쿼리셋도 많이 공부를 해야했었다.
class SignInView(View):
def post(self,request):
try:
data = json.loads(request.body)
email = data["email"]
input_password = data["password"]
user = User.objects.get(email= email)
checkpw_input_db = bcrypt.checkpw(input_password.encode('utf-8'), user.password.encode('utf-8') )
if not checkpw_input_db:
return JsonResponse( {'message' : 'INVALID_PASSWORD.' } , status = 401)
new_token = jwt.encode( {"user": user.id } , settings.SECRET_KEY , algorithm= settings.ALGORITHM)
return JsonResponse({"token": new_token , "massage" : "we did it" } , status = 200)
except KeyError:
return JsonResponse({"message": "KEY_ERROR"}, status=401)
except User.DoesNotExist:
return JsonResponse({'massage':"INVALID_EMAIL"}, status=401)
checkpw를 통해 JWT토큰이 나왔을 때 박수가 저절로 나왔다. 그 후 프론트 분들과 통신에서 내가 만든 view들이 정상적으로 작동할 때 조원끼리 다 웃으면서 "와 코딩 나랑 잘 맞는것 같아 너무 재밌어!" 라고 말했다.
너무 긴장한건 사실 비밀.후에 이뤄질 1차 프로젝트도 힘들지만 재밌게 해내길 미래에 나에게 기도해본다.
수훈님 항상 화이팅 🔥