JSON响应返回404状态代码{“ detail”:“未找到。”}

时间:2020-05-29 13:31:49

标签: python django django-rest-framework

在检查Postman与Localhost时,状态代码之间存在差异。以下TestCase在['This is my ', ' do you like it?'] 处通过。邮递员也返回response.status_code == 200。但是,当我使用Localhost发出200请求时,会得到PUT状态代码。当我在开发人员工具中检查响应时,得到404

我想了解是什么引起了{"detail": "Not Found"}enter image description here

tests.py

404

views.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)

serializers.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)

0 个答案:

没有答案