우리 서비스의 회원으로 등록된 사용자를 로그인하도록 허가하는 과정에 대해 진행하겠습니다.
import json
from django.http import JsonResponse, HttpResponse
from django.views import View
from user.models import User
... (회원가입 클래스 생략)
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).exists():
return JsonResponse({'message': 'INVALID_USER'}, status=401)
user = User.objects.get(email=email)
if user.password == password:
return JsonResponse({'message': 'SUCCESS'}, status=200)
return JsonResponse({'message': 'INVALID_USER'}, status=401)
except KeyError:
return JsonResponse({'message': 'KEY_ERROR'}, status=400)
from django.urls import path, include
urlpatterns = [
path('user', include('user.urls'))
]
회원가입과 로그인 경로를 나누었다.
from django.urls import path
from user.views import SignUpView, SignInView
urlpatterns = [
path('/signup', SignUpView.as_view()),
path('/signin', SignInView.as_view())
]
터미널에 명령어 입력할 때도
예를 들어 로그인이면
http POST 127.0.0.1:8000/user/signin
이런 식으로 경로를 덧붙여 주어야 한다.
처음에 이렇게 작성하였는데..
if User.objects.filter(email=email).exists():
user = User.objects.get(email=email)
else:
return JsonResponse({'message': 'INVALID_USER'}, status=401)
👇 이렇게도 해 볼 수 있다면서 고쳐주셨다
if not User.objects.filter(email=email).exists():
return JsonResponse({'message': 'INVALID_USER'}, status=401)
user = User.objects.get(email=email)
else문을 안 쓰고 작성하는 법을 염두에 두자
이것도 위와 동일하게 처음에는 이렇게 작성했었는데...
if user.password == password:
return JsonResponse({'message': 'SUCCESS'}, status=200)
else:
return JsonResponse({'message': 'INVALID_USER'}, status=401)
👇 else문을 생략해서 쓰는 걸로 고쳐주셨다
if user.password == password:
return JsonResponse({'message': 'SUCCESS'}, status=200)
return JsonResponse({'message': 'INVALID_USER'}, status=401)