You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置DRF可浏览API根目录,自动展示所有API路由

自动生成DRF API根页面的两种方法

方法一:使用DRF内置路由器(推荐)

DRF自带的DefaultRouter和SimpleRouter可以自动生成包含所有注册端点的根页面,完全不用手动配置。你只需要把现有路由改成路由器注册的方式:

  1. 先导入路由器:
from rest_framework.routers import DefaultRouter
  1. 初始化路由器并注册你的视图:
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注册
  1. 修改主路由配置:
path("api/", include(router.urls))

访问/api/时,就会自动展示所有注册的端点链接,且自带可浏览API的样式。

注意:如果类视图继承的是ModelViewSet,basename可以省略,DRF会自动推断;如果是普通APIView,则必须指定basename。

方法二:自定义根视图(适配现有路由结构)

如果不想改动现有路由写法,也可以写一个自定义根视图,自动扫描所有命名路由并筛选出api/开头的端点:

  1. 在你的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)
  1. 在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 02:57:31