Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django restframework:ReadOnlyModelViewSet创建HTTP_403,但应为HTTP_405_Python_Django_Django Rest Framework - Fatal编程技术网

Python Django restframework:ReadOnlyModelViewSet创建HTTP_403,但应为HTTP_405

Python Django restframework:ReadOnlyModelViewSet创建HTTP_403,但应为HTTP_405,python,django,django-rest-framework,Python,Django,Django Rest Framework,我正在使用django和django REST框架创建一个REST-API,因此我使用的是ReadOnlyModelViewSet。在我测试create/POST方法的单元测试中,我希望HTTP\u 405\u method\u不被允许,但实际上它是HTTP\u 403\u禁止的。对于update/PUT,它是HTTP_405。这是默认行为还是我有一个愚蠢的bug 是的,用户已通过身份验证 视图集: class StudentSolutionReadOnlyModelViewSet(viewse

我正在使用django和django REST框架创建一个REST-API,因此我使用的是
ReadOnlyModelViewSet
。在我测试
create/POST
方法的单元测试中,我希望
HTTP\u 405\u method\u不被允许
,但实际上它是
HTTP\u 403\u禁止的
。对于
update/PUT
,它是
HTTP_405
。这是默认行为还是我有一个愚蠢的bug

是的,用户已通过身份验证

视图集:

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\u url
方法。

您发送的
POST
请求是否经过身份验证?是的,它经过身份验证确定,这很奇怪,尝试调试,看看您是否首先进入了条件块
self.request.method='POST'
。是的,我正在进入街区。我还将每个案例的权限更改为
permissions.AllowAny()
,并且仍然是相同的行为操作。。在您的测试中,
url
的值是多少?