当URL参数改变时,Django REST返回404

2024-04-20 07:02:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用Django REST框架创建一个支持JSON和CSV输出的API。你知道吗

我的urls.py中有这样一行:

url(r'^api/events/$', views.EventsView.as_view(), name='events'),

事件视图如下所示:

class EventsView(APIView):

    def dispatch(self, request, *args, **kwargs):
        return super(EventsView, self).dispatch(request, *args, **kwargs)

    def get(self, request):

        logger.info("Here")

        events = EventsQuery(request)
        if events.is_valid():
            events.build_response()

        return events.get_response()

如果我访问/api/events/?format=json,我会得到一组结果作为有效的JSON,并且我会看到“Here”被记录到我的日志文件。你知道吗

如果我访问/api/events/?format=csv,我会得到一个404响应,JSON主体是

{
"detail": "Not found."
}

…而且没有任何记录。你知道吗

缺少日志记录让我很沮丧。这就好像它连EventsView类都没有,但是在URL中更改querystring值怎么能阻止它被路由到那个类呢?我怎么知道它被传送到哪里?你知道吗


编辑:的内容EventsQuery.get\u响应()是:

def get_response(self):
    if self.has_error:
        self.response = {
            'success': self.success,
            'errors': self.errors
        }
        resp_status = status.HTTP_400_BAD_REQUEST
    else:
        resp_status = status.HTTP_200_OK

    return Response(
        self.response, status=resp_status, content_type=self.content_type
    )

Tags: selfapijsongetreturnresponserequestdef
1条回答
网友
1楼 · 发布于 2024-04-20 07:02:33

我仍然不清楚根本原因,但我已经解决了这个问题,使用format\u suffix\u模式来传递format参数,而不是将其作为querystring参数传递。我确认了-通过覆盖APIView.handle\u异常()-父类引发了404异常,但我不知道为什么。你知道吗

相关问题 更多 >