본문 바로가기

내일 배움 캠프/TIL

TIL) 7주차 5일

오늘에서야 개인과제 시작!

 

역시 어렵다 어려워..

 

오늘도 화이팅!


users의 LoginView

기존에 강의에서 배웠던 로그인 뷰를 실행하면 아래와 같이 refresh토큰과 access토큰만 받아와 졌다.

 

기존과 받아오는 형식과 달리 로그인 하는 아이디의 id, email, token 3가지를 받아오고 싶었기 때문에 views.py의 login함수를 변경해주었다.

# 기존 코드
class CustomTokenObtainPairView(TokenObtainPairView):
    serializer_class = CustomTokenObtainPairSerializer
    
    
# 변경 코드
class CustomTokenObtainPairView(APIView):
    def post(self, request):
        try:
            email = request.data.get("email", "")
            password = request.data.get("password", "")
            
            user = authenticate(request, email=email, password=password)
            
            user_serializer = UserSerializer(user)
            token = CustomTokenObtainPairSerializer.get_token(user)
            refresh_token = str(token)
            access_token = str(token.access_token)
            
            response = Response(
                {
                    "message" : "로그인 성공",
                    "id" : user_serializer.data["id"],
                    "email" : user_serializer.data["email"],
                    "token" : {
                        "refresh" : refresh_token,
                        "access" : access_token,
                    }
                }
            )
            login(request, user)
            print("views.py의 acess_token :", access_token)
            return response
        except AttributeError:
            return Response("email 또는 password가 다릅니다.", status=status.HTTP_403_FORBIDDEN)

사용자 인증 authenricate 함수를 사용하기 위해 email과 password를 선언해주고, token을 받아오기 위해 serializers.py의 클래스를 받아왔다.  결과는 다음과 같다.


users의 ModifyView

class UserModifyView(APIView):
    permission_classes = [permissions.IsAuthenticated]
    
    def put(self, request, user_id):
        users = get_object_or_404(User, id=user_id)
        
        if request.user == users:
            print(request.user, users, request.data["email"], user_id)
            print(type(request.user),type(users),type(request.data["email"]))
            serializer = UserModifySerializer(users, data=request.data)
            if serializer.is_valid():
                serializer.save()
                return Response("회원정보가 수정되었습니다.",status=status.HTTP_200_OK)
            else:
                return Response("이미 존재하는 아이디 입니다!", status=status.HTTP_403_FORBIDDEN)

이 코드에서 한가지 의문인 것은 if request.user == user: 부분이다. request.user와 users, request.data["email"]을 출력해보면 다 같은 값이 나온다. 그래서 users 대신에 request.data["email"]을 넣어도 작동이 될 것 같아서 넣었더니 오류가 나왔다. 이러한 이유는 type을 알아보면 알 수 있었다.

이처럼  request.user와 users는 type의 형태가 같지만  request.data["email"]는 다르다는것을 알 수 있다. 이를 태면 숫자 10과 문자 '10'의 차이라고 생각하면 된다.


 

'내일 배움 캠프 > TIL' 카테고리의 다른 글

TIL) 8주차 3일  (0) 2023.05.04
TIL) 8주차 1일  (0) 2023.05.02
TIL) 7주차 4일  (0) 2023.05.01
TIL) 7주차 3일  (0) 2023.04.27
TIL) 7주차 2일  (0) 2023.04.26