JSON ответ возвращает {"detail": "Not found."}, Код состояния 404 - PullRequest
0 голосов
/ 29 мая 2020

Я обнаружил несоответствие кодов статуса при проверке Postman vs. Localhost. Следующий TestCase проходит где response.status_code == 200. Почтальон также возвращает 200. Однако, когда я делаю запрос PUT при использовании Localhost, я получаю код состояния 404. Когда я проверяю ответ в инструментах разработчика, я получаю {"detail": "Not Found"}.

Я хочу понять, что вызывает 404? enter image description here

tests.py

class TestUpdateUserPreferences(TestCase):
    @classmethod
    def setUpTestData(cls):
        cls.user = User.objects.create_user("Tester")
        cls.credentials = b64encode(b"Mock:secret").decode("ascii")
        UserPref.objects.create(
            gender=["MALE"],
            size=["MEDIUM", "LARGE"],
            age=["BABY", "ADULT"],
            user=cls.user
        )

        cls.updated_pref_data = json.dumps({
            "gender": ["FEMALE"],
            "size": ["SMALL"],
            "age": ["BABY"]
        })

        cls.factory = APIRequestFactory()

    def test_update_user_preferences_success(self):

        request = self.factory.put(
            reverse("user-pref-settings"),
            data=self.updated_pref_data,
            content_type="application/json"
        )
        force_authenticate(request, self.user)
        response = SetUserPrefView.as_view()(request)

        self.assertEqual(response.status_code, 200)

views.py

class SetUserPrefView(
    GenericAPIView,
    RetrieveModelMixin,
    UpdateModelMixin):

    queryset = UserPref.objects.all()
    serializer_class = UserPreferenceSerializer

    def get_object(self):
        user = self.request.user
        return get_object_or_404(self.get_queryset(), user=user)

    def get(self, *args, **kwargs):
        return self.retrieve(self.request, *args, **kwargs)


    def put(self, *args, **kwargs):
        return self.update(self.request, *args, **kwargs)

    def perform_update(self, serializer):
        return serializer.save(user=self.request.user)

serializers.py


class UserPreferenceSerializer(serializers.Serializer):
    gender = serializers.MultipleChoiceField(choices=USER_PREF_DOG_GENDER)
    size = serializers.MultipleChoiceField(choices=USER_PREF_DOG_SIZE)
    age = serializers.MultipleChoiceField(choices=USER_PREF_DOG_AGE)

    def update(self, instance, validated_data):
        instance.gender = validated_data.get('gender')
        instance.size = validated_data.get('size')
        instance.age = validated_data.get('age')
        instance.user = instance.user
        instance.save()
        return instance
...