Django restframework: ReadOnlyModelViewSet создает HTTP_403, но ожидается HTTP_405 - PullRequest
0 голосов
/ 25 июня 2018

Я создаю REST-API с django и структурой отдыха django, поэтому я использую ReadOnlyModelViewSet.В моем модульном тесте для тестирования create / POST метода я ожидаю HTTP_405_METHOD_NOT_ALLOWED, но на самом деле это HTTP_403_FORBIDDEN.Для update / PUT это HTTP_405, как и ожидалось.Это поведение по умолчанию или у меня тупая ошибка?

И да, пользователь прошел аутентификацию.

The Viewset:

class StudentSolutionReadOnlyModelViewSet(viewsets.ReadOnlyModelViewSet):
    queryset = StudentSolution.objects.all()
    serializer_class = StudentSolutionSerializer

    def get_permissions(self):
        if self.request.method == 'POST':
            return (permissions.IsAuthenticated(), )
        return (permissions.IsAuthenticated(), IsStudentSolutionOwnerOrAdmin(),)

    def get_queryset(self):
        if self.request.user.is_staff:
            return StudentSolution.objects.all(
                course_assignment=self.kwargs['course_assignment_pk']
                ).order_by('student__last_name', 'course_assignment__due_date')
        return StudentSolution.objects.filter(
            student=self.request.user,
            course_assignment=self.kwargs['course_assignment_pk']
            ).order_by('course_assignment__due_date')

Редактировать 1:

class StudentSolutionReadOnlyModelViewSetTests(TestCase):
    def setup(self): 
        #[..]

    def test_create_user_not_allowed(self):
        data = {
            'course_assignment': self.course_assignment.id,
            'student': self.user.id
        }

        url = self.generate_url(self.course_assignment.id)

        self.csrf_client.credentials(HTTP_AUTHORIZATION='JWT ' + self.user_token)
        resp = self.csrf_client.post(
            self.url,
            data=json.dumps(data),
            content_type='application/json'
        )
        self.assertEqual(resp.status_code, status.HTTP_405_METHOD_NOT_ALLOWED)

Я использую одинаковые средства аутентификации и csrf для всех методов, а также метод generate_url.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...