본 게시글은 스파르타 코딩 클럽 장고 심화 강의 내용에 생긴 문제 해결법을 다루고 있습니다.
장고 심화 강의 학습 도중, 강의내용과 차이가 있었다.
차이점이 생긴 이유는 강의에서 따로 지급한 코드를 따라 할 수 있지만
지양하는 점은 지금까지 만든 코드에서 차이점을 해결하는 것입니다.
user app view.py 의 ProfileView CBV
class ProfileView(APIView):
def get(self,request,user_id):
user = get_object_or_404(User,id=user_id)
serializer = UserProfileSerializer(user)
# return Response(serializer.data)
return Response(user.email)
user app test.py
def test_get_user_data(self):
access_token = self.client.post(reverse('token_obtain_pair'),self.data)
# print(f"로그인 정보 {self.data}")
# print("인증 토큰 확인\n",access_token.data['access'])
# print(f"유저 아이디 {self.user.id}")
response = self.client.get(
path=reverse("profile_view",args=[self.user.id]),
HTTP_AUTHORIZATION=f"Bearer {access_token.data['access']}"
)
print(response)
# reponse 반환 받은 값은 Reponse 객채이므로, content 타입을 변환해야한다.
email = response.content.decode()
email = email.replace('"','')
# 반환 받는 값은
print(type(self.data['email']),self.data['email'])
print(type(email),email)
#
self.assertEqual(response.status_code,200)
self.assertEqual(email,self.data['email'])
2 . URL 위치를 변경합니다.
reverse 메소드는 지정한 URL의 name값을 지칭하게 되어있습니다.
그런데 여기서 user의 id값을 어떻게 보내냐? 의 문제를 직면하게 됩니다.
reverse('name','int')
이러한 값이 필요하게 되는데
args = [int값] 을 추가하여 문제를 해결할 수 있습니다.
가장 상단의 response의 값을 출력하면 다음과 같은 결과값이 나오게 됩니다.
Response 객채의 status code 값과 우항의 값은 뭔지는 잘 모르겠지만 json이라는것을 확인할 수 있습니다.
따라서 json형태의 값에서 email을 추출하는 과정이 필요하다는것을 알게 되었습니다.
비교하는 과정에서 더 좋은 방법이 있을 수 있고, 완벽한 해결책이 아닙니다.
email의 값을 추출하고 replace를 한 과정이 보이는데,
이 과정 없이 데이터를 출력해보겠습니다.
첫 번째로 출력된것은 클래스에서 만들어낸 오브젝트의 출력값이고
두 번째로 출력된 값은
' 클래스에서 생성한 오브젝트 ' 를 ' view.py '로 발송하여
반환 받은 값 입니다.
type이 str인것은 같으나, 스트링 형식에 차이점이 있습니다. (""가 있음)
따라서 replace를 통해 ""를 제거하고
좌항과 우항의 값이 같은지 비교합니다.