westagram 과제 코드리뷰(Signin View)

7376 단어 djangopythondjango
class SigninView(View):
	def post(self, request):
    		data = json.loads(request.body)
                try:
                	email        = data['email']
                	password     = data['password']
                	name         = data.get('name', None)
            		phone_number = data.get('phon_number', None)  
                        #
                        if not User.objects.filter(email=email).exists():
                        	return JsonResponse({'MESSAGE':'INVALID_USER'}, status=401)  
                        #
                        user            = User.objects.get(email=email)         
                        hashed_password = user.password.encode('utf-8')  
                        #
                        if not bcrypt.checkpw(password.encode('utf-8'), hashed_password):
                        	return JsonResponse({'MESSAGE':'INVALID_USER'}, status=401)  
                        #
                        access_token = jwt.encode(
                        	{'user_id' : user.id}, 
                        	SECRET_KEY, 
                        	algorithm = 'HS256'
                             )
                        #
                        return JsonResponse({'MESSAGE':'SUCCESS', 'ACCESS_TOKEN':access_token}, status=200)
                        #
                 except KeyError:
            		return JsonResponse({'MESSAGE':'KEY_ERROR'}, status=400)
                        ``` 

-로그인을 위한 SigninView 리뷰
1. 프론트로부터 request를 받아 json.loads 함수를 통해 파이썬 형식으로 변환
2. 변환된 데이터를 미리 만들어 둔 데이터베이스에 저장
3. filter함수를 통해 User 클래스 내에 request로 요청받은 email 값을 추출하고 요청받은 값이 데이터베이스 내에 없다면 메세지를 띄움
4. request로 요청받은 email 값을 user 변수에 저장
5. hashed_password 변수에 요청받은 user의 password를 인코딩하여 저장(password를 해쉬 시키기 위해서는 str형식에서 bytes형식으로 변환해야함)
6. bcrypt.checkpw 함수를 통해 요청받은 password값과 해쉬된 password 값을 비교하여 다르면 메세지를 띄움
7. acces_token 변수에 토큰을 저장하고 조건에 만족하면 메세지와 함께 토큰 값을 리턴시킴

좋은 웹페이지 즐겨찾기