gpt4 book ai didi

python - DefaultRouter 类没有为 python 中的所有应用程序创建 API Root View

转载 作者:行者123 更新时间:2023-12-01 11:26:10 31 4
gpt4 key购买 nike

我正在创建一个简单的 Python API,其中包含两个名为 snippets 的应用程序。和 polls .对于我的 API 的单一入口点,我正在使用 DefaultRouter类而不是常规的基于函数的 View 和 @api_view装饰器。

Django Rest Framework Tutorial 中所述那

The DefaultRouter class automatically creates the API root view



我在 API 根 View 中遇到问题。这是我的 snippets/urls.py
router = DefaultRouter()
router.register(r'snippets', views.SnippetViewSet)
router.register(r'users', views.UserViewSet)

urlpatterns = [
url(r'^', include(router.urls)),
url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework'))
]

这是我的 polls/urls.py
router = DefaultRouter()
router.register(r'actors', views.ActorViewSet)

urlpatterns = [
url(r'^', include(router.urls)),
url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework'))
]

我的 /urls.py如下
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^', include('snippets.urls')),
url(r'^', include('polls.urls')),
url(r'^api-auth/', include('rest_framework.urls',
namespace='rest_framework')),
]

现在,当我启动服务器并在浏览器中加载应用程序时,它只将片段的 url 显示为这样的入口点(缺少民意调查的 url)

enter image description here

如果更改我的根 urls.py像这样(首先添加 polls.urls,然后添加 snippets.urls)
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^', include('polls.urls')),
url(r'^', include('snippets.urls')),
url(r'^api-auth/', include('rest_framework.urls',
namespace='rest_framework')),
]

现在它显示民意调查的网址(缺少片段网址)

enter image description here

但我想要两个应用程序的网址。我不知道我在这里错过了什么。任何形式的帮助将不胜感激。

最佳答案

您的 url.py 可能如下所示(创建自定义文档页面)

from django.urls import path, include
from rest_framework import routers
from rest_framework.response import Response
from rest_framework.views import APIView
from . import views


class DocsView(APIView):
"""
RESTFul Documentation of my app
"""
def get(self, request, *args, **kwargs):
apidocs = {'api1title': request.build_absolute_uri('api1endpoint/'),
'api2title': request.build_absolute_uri('api2endpoint/'),
'api3title': request.build_absolute_uri('api3endpoint/'),
'api4title': request.build_absolute_uri('api4endpoint/'),
}
return Response(apidocs)


router = routers.DefaultRouter()
router.register('api1endpoint', views.API1ViewSet)
router.register('api2endpoint', views.API2ViewSet)


urlpatterns = [
path('', DocsView.as_view()),
path('', include(router.urls)),
path('api3endpoint/', views.API4View.as_view()),
path('api4endpoint/', views.API4View.as_view()),
]

关于python - DefaultRouter 类没有为 python 中的所有应用程序创建 API Root View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37066146/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com