【问题标题】:Django REST Framework Viewset returns a 404 (GET request)Django REST Framework Viewset 返回 404(GET 请求)
【发布时间】: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)

【问题讨论】:

    标签: python django django-rest-framework


    【解决方案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/

      【讨论】:

        猜你喜欢
        • 2018-10-01
        • 2021-01-19
        • 2018-12-22
        • 1970-01-01
        • 1970-01-01
        • 2019-01-07
        • 2021-08-07
        • 1970-01-01
        • 2020-11-09
        相关资源
        最近更新 更多