如何配置DRF可浏览API根目录,自动展示所有API路由
自动生成DRF API根页面的两种方法
方法一:使用DRF内置路由器(推荐)
DRF自带的DefaultRouter和SimpleRouter可以自动生成包含所有注册端点的根页面,完全不用手动配置。你只需要把现有路由改成路由器注册的方式:
- 先导入路由器:
from rest_framework.routers import DefaultRouter
- 初始化路由器并注册你的视图:
router = DefaultRouter() # 函数视图需提前用@api_view装饰,否则路由器无法识别 router.register(r'users', api_views.users, basename='users') router.register(r'proposals', api_views.Proposals, basename='proposals') router.register(r'requests', api_views.Requests, basename='requests') # 其他路由继续用router.register注册
- 修改主路由配置:
path("api/", include(router.urls))
访问/api/时,就会自动展示所有注册的端点链接,且自带可浏览API的样式。
注意:如果类视图继承的是ModelViewSet,basename可以省略,DRF会自动推断;如果是普通APIView,则必须指定basename。
方法二:自定义根视图(适配现有路由结构)
如果不想改动现有路由写法,也可以写一个自定义根视图,自动扫描所有命名路由并筛选出api/开头的端点:
- 在你的
api_views中添加这个视图:
from django.urls import reverse from rest_framework.response import Response from rest_framework.views import APIView class APIRoot(APIView): def get(self, request, format=None): endpoints = {} # 筛选api命名空间下的所有路由(需确保路由name带api:前缀) for name in [name for name in request.resolver_match.urlconf_names if name.startswith('api:')]: try: url = reverse(name, request=request) endpoints[name.split(':')[1]] = url except: continue return Response(endpoints)
- 在
urls.py中添加根路由:
path("api/", api_views.APIRoot.as_view(), name="api-root"), path("api/", include([ path("users/", api_views.users, name="api:users"), path("proposals/", api_views.Proposals.as_view(), name="api:proposals"), path("requests/", api_views.Requests.as_view(), name="api:requests"), #... 其他路由统一加上api:前缀 ]))
访问/api/就会返回所有api下的端点链接,也能在可浏览API中正常显示。
注意:这种方法依赖路由的name属性,需确保每个路由都有唯一名称,且统一加上api:前缀方便筛选。
内容的提问来源于stack exchange,提问作者Luciano
相关产品推荐
相关产品推荐

