::: 현재까지 진행 상황 :::
- 초기 세팅 완료
- Users 앱 생성 완료
- models.py의 User 클래스 작성 완료
- DB에 migrate까지 진행
- 회원가입 기능 구현 (정규표현식, 예외처리 사용)
로그인 시, 사용자 계정 & 비밀번호 필수
계정 혹은 패스워드 키가 전달되지 않을 경우,
{"message":"KEY_ERROR"}, status=400
반환
계정 혹은 패스워드를 다르게 입력한 경우,
{"message":"INVALID_USER}, status=401
반환
로그인 성공 시,
{"message":"SUCCESS"}, status=200}
반환
class SignInView(View):
def post(self, request):
try:
data = json.loads(request.body)
email = data['email']
password = data['password']
if not User.objects.filter(email = email, password = password).exists():
return JsonResponse({"message": "INVALID_USER"}, status=401)
return JsonResponse({"message": "SUCCESS"}, status=200)
except KeyError:
return JsonResponse({"message": "KEY_ERROR"}, status=400)
class SignInView(View):
def post(self, request):
try:
data = json.loads(request.body)
email = data['email']
password = data['password']
if not User.objects.filter(email = email, password = password).exists():
return JsonResponse({"message": "INVALID_USER"}, status=401)
# 코드리뷰를 받기 전에는 아래와 같은 지저분한 코드를 작성했었음....
# if not User.objects.filter(email=email).exists() or \
# not User.objects.get(email=email).password == password:
# 하지만, filter().exists()를 통해서 get method를 사용하지 않고 한번에 필터링이 가능
try:
except KeyError:
return JsonResponse({"message": "KEY_ERROR"}, status=400)
# 이메일 or 비밀번호의 키가 제대로 전달되지 않는 경우 400에러를 반환시키기 위한 예외처리
# 이 케이스의 경우 KeyError에 해당되므로, 위와 같이 코드를 작성
# (KeyError:: 키 없음 에러(주로 딕셔너리 사용시)
REFERENCE
users/urls.py
from django.urls import path
from users.views import SignUpView, SignInView # SignInView 추가!!
urlpatterns = [
path('/signup', SignUpView.as_view()),
path('/signin', SignInView.as_view()), # SignInView 추가!!
]
추가적으로, Token을 부여하기 위한 암호화를 진행하게되면 회원가입, 로그인 코드들에 bcrypt와 jwt가 추가된다.
암호화 관련된 내용은 추후 포스팅에서 다루도록 하겠다.