django 심화 5-9강 4:57에서 다음과 같은 error가 발생했다.
# users/test.py
class LoginUserTest(APITestCase):
def setUp(self):
self.data = {'email':'happy@gmail.com', 'password':'happy'}
self.user = User.objects.create_user('happy@gmail.com', 'happy') # 유저모델
def test_login(self):
response = self.client.post(reverse('token_obtain_pair'), self.data)
print(response.data["access"])
self.assertEqual(response.status_code, 200)
def test_get_user_data(self):
access_token = self.client.post(reverse('token_obtain_pair'), self.data).data['access']
response = self.client.get(
path=reverse("user_view"),
HTTP_AUTHORIZATION=f"Bearer {access_token}"
)
print(response.data)
self.assertEqual(response.status_code, 200)
{'detail': ErrorDetail(string='Method "GET" not allowed.', code='method_not_allowed')}
링크의 2번째 답변에서 솔루션을 찾았다.
https://stackoverflow.com/questions/57302570/detail-method-get-not-allowed-django-rest-framework
views.py에 들어가보니 UserView 클래스에 post()
만 정의되어 있었다.
아래와 같이 get()
을 추가하니 정상적으로 작동되었다.
# users/views.py
class UserView(APIView):
# 사용자 정보 조회
def get(self, request):
return Response(UserSerializer(request.user).data, status=status.HTTP_200_OK)
# 회원가입
def post(self, request):
serializer = UserSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response({"message":"회원가입이 완료되었습니다."})
else:
return Response({"message":f"${serializer.errors}"}, status=status.HTTP_400_BAD_REQUEST)
코드는 강의자료 ai2_back을 참고했다.
시리얼라이저명이 달라서 UserSignupSerializer> UserSerializer로 수정했다.