我正在创建一个简单的Python,其中包含两个名为snippets和polls的应用程序。对于我的API的单个入口点,我使用的是DefaultRouter类,而不是常规的基于函数的视图和@api_view装饰器。
正如Django Rest框架教程中所述,
DefaultRouter类自动创建API根视图。
我在API根视图中有问题。这是我的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是缺少的)。

如果像这样更改根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')),
]现在它显示了投票的urls (缺少片段urls)

但我想要那两个应用程序的网址。我不知道我在这里错过了什么。任何帮助都将不胜感激。
发布于 2018-03-10 02:03:39
您的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()),
]发布于 2017-01-15 09:54:21
您不应该有相同的regex模式映射到urlpatterns中的不同视图。当发生这种情况时,服务器将只使用第一个匹配模式并将其路由到第一个匹配视图。
另外,您可以创建默认路由器并在根文件夹中注册这两个视图,这样它就可以处理两个视图集的api_rootview。
http://www.django-rest-framework.org/api-guide/routers/#defaultrouter
https://stackoverflow.com/questions/37066146
复制相似问题