로그인을 구현하려면 장고 app 디렉토리에 있는 view 파일에 클래스를 하나더 만들어 로그인 기능을 넣어주면 된다
그리고 veiw 파일에 클래스를 추가하고 그 기능을 사용하면 app에 있는 urls 파일에 그 클래스가 있다는 것을 알려주어야한다
유저정보의 구성을 담은 모델파일을 확인해보자 어플 디렉토리의 models 파일을 만들면된다
from django.db import models
class Users(models.Model):
name = models.CharField(max_length = 50)
email = models.CharField(max_length = 50)
password = models.CharField(max_length = 300)
created_at = models.DateTimeField(auto_now_add = True)
updated_at = models.DateTimeField(auto_now = True)
# Create your models here.
일단 app의 urls파일을 연다
from django.urls import path
from .views import MainView, SignIn
urlpatterns = [
path('', MainView.as_view()),
path('signin/', SignIn.as_view())
]
mainview 클래스는 회원가입을 하기위해 만들어논 클래스이고
우리가 로그인을 구현하기 위해 만들 클래스가 signin 이다 (이름은 원하는대로 하면된다)
그리고 만들 클래스의 이름을 views 파일로부터 import 한다음
path 함수 를 통해 urls에 연결하고 도메인뒤에 연결할 주소 'signin/'
그리고 SignIn.as_view() 에서 SignIn은 우리가 view 파일에 올릴 클래스이름(클래스는 보기쉽게 단어 앞글자를 대문자로 하는것이 약속이다)
.as_view()는 장고의 상속받을 클래스를 적어주는것이다
이렇게 urls에 view파일을 불러오는 코드를 짜고 view파일을 열어보자
from django.shortcuts import render
import json
from django.views import View
from django.http import JsonResponse
from .models import Users
class MainView(View):
def post(self, request):
data = json.loads(request.body)
Users(
name = data['name'],
email = data['email'],
password = data['password']
).save()
return JsonResponse({'message':'SUCCESS'}, status=200)
def get(self, request):
user_data = Users.objects.values()
return JsonResponse({'users':list(user_data)}, status=200)
class SignIn(View):
def post(self, request):
data = json.loads(request.body)
try:
if Users.objects.filter(email = data['email']).exists():
user = Users.objects.get(email = data['email'])
else:
return JsonResponse({'message':'get wrong'}, status = 401)
if user.password == data['password']:
return JsonResponse({'message':'SUCCESS'}, status=200)
return JsonResponse({'message':'get wrong'}, status = 401)
except KeyError:
return JsonResponse({'message':'key wrong'}, status=400)
# Create your views here.
class MainView는 회원가입을 위한 클래스를 만들어 논것이고
로그인 기능은 SignIn 클래스를 봐야한다
class SignIn(View): #(View)는 장고의 클래스의 상속을 받는다
def post(self, request): #입력값을 받는다
data = json.loads(request.body) # 입력값을 코드를 짜기 편하게 값을 받고
try: # 만약 로그인정보가 틀려 오류가 날때 를 대비하여 try, except 문으로 작성한다
if Users.objects.filter(email = data['email']).exists():
user = Users.objects.get(email = data['email'])
else:
return JsonResponse({'message':'get wrong'}, status = 401)
# 만약 입력한 이메일값이 데이터이메일값과 같으면 user변수명에 이메일값을 저장하고
# 이메일이 틀리다면 401 오류를 내어 get wrong이 출력된다
if user.password == data['password']:
return JsonResponse({'message':'SUCCESS'}, status=200)
return JsonResponse({'message':'get wrong'}, status = 401)
except KeyError:
return JsonResponse({'message':'key wrong'}, status=400)
#받은 이메일값의 패스워드 와 데이터패스워드가 같으면 SUCCESS메세지를 응답받고
같지 않다면 401오류를 출력한다
#키값이 맞지 않다면 400 오류가나며 key wrong 이 출력된다
# Create your views here.