Django REST Framework Viewset 返回 404(GET 请求)

Posted

技术标签:

【中文标题】Django REST Framework Viewset 返回 404(GET 请求)【英文标题】:Django REST Framework Viewset returns a 404 (GET request) 【发布时间】:2020-08-26 13:20:10 【问题描述】:

我正在寻求了解 ViewSet 在 Django REST 框架的上下文中与路由器一起使用时如何补充 URL 路由。当我在api/v2/people/ 请求收集时,会返回 404 响应。我不清楚视图在浏览器中呈现并获得 200 状态代码作为响应的一部分还需要什么?

urls.py

from django.urls import path, include

from rest_framework import routers

from people import views

router = routers.SimpleRouter()
router.register(r'people', views.PersonViewSet, basename="people")

urlpatterns = [
    path('admin/', admin.site.urls),
    path('api-path/', include('rest_framework.urls')),
    path('api/v2/people/', include(router.urls), name="people")
]

people/views.py


from rest_framework.viewsets import ViewSet

from .models import Person
from .serializers import PersonSerializer


class PersonViewSet(ViewSet):

    def list(self, request):
        queryset = Person.objects.all()
        serializer = PersonSerializer(queryset, many=True)
        return Response(serializer.data)

【问题讨论】:

【参考方案1】:

根据你的配置,应该试试这个网址api/v2/people/people/


或者改变

urlpatterns = [
    path('admin/', admin.site.urls),
    path('api-path/', include('rest_framework.urls')),
    path('api/v2/', include(router.urls), name="people") # removed `people/`
]

然后访问api/v2/people/

【讨论】:

【参考方案2】:

您可能已经像这样定义了您的应用级 urls.py,

# your app level urls.py
urlpatterns = [
            .....
            .....
            path('people/',<Your view>, name='people-list'),
        ]

在你的根 urls.py 中,

# your root level urls.py
urlpatterns = [
    .......
    path('api/v2/people/', include(router.urls), name="people")
]

所以在附加两者之后,最终的 url 端点是, api/v2/people/people/

但您要求api/v2/people/

所以要么像这样从你的根 urls.py 中删除 people/

# your root level urls.py
urlpatterns = [
    .......
    path('api/v2/', include(router.urls), name="people")
]

然后请求api/v2/people/

,通过api/v2/people/people/提出请求

,从您的应用级 urls.py 中删除 people/

# your app level urls.py
urlpatterns = [
  .....
  .....
  path('',<Your view>, name='people-list'), # this is not a good option though

]

然后请求api/v2/people/

【讨论】:

以上是关于Django REST Framework Viewset 返回 404(GET 请求)的主要内容,如果未能解决你的问题,请参考以下文章

第 5 篇:用视图集,简化你的代码

Django-rest-framework 和 django-rest-framework-jwt APIViews and validation Authorization headers

Django Rest Framework 和 django Rest Framework simplejwt 两因素身份验证

怎么安装django rest framework

django rest framework中文介绍

17-Django-Django REST framework-REST framework及RESTful简介