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 请求)的主要内容,如果未能解决你的问题,请参考以下文章
Django-rest-framework 和 django-rest-framework-jwt APIViews and validation Authorization headers
Django Rest Framework 和 django Rest Framework simplejwt 两因素身份验证