'Method "GET" not allowed.'

Grace Goh·2022년 11월 15일
0

오류 해결

목록 보기
9/17

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로 수정했다.

profile
Español, Inglés, Coreano y Python

0개의 댓글