Django REST Framework路由带前缀时如何让根索引页可浏览?
实现根路由展示API列表的可行方案
以下是基于你当前Django REST Framework(DRF)项目的两种常用实现方案:
方案1:根路径展示API版本入口(推荐)
该方案逻辑简单、易维护,符合接口多版本迭代的常规设计:
- 先定义根路由的视图函数,返回所有可用的API版本入口
from rest_framework.decorators import api_view from rest_framework.response import Response @api_view(['GET']) def api_root(request, format=None): return Response({ 'v1': request.build_absolute_uri('/v1/'), # 后续新增v2、v3等版本时直接在此处添加即可 })
- 修改urlpatterns配置,绑定根路径到上述视图
urlpatterns = [ path('', api_root, name='api-root'), path('v1/', include(router.urls)) ]
配置完成后访问api.domain.tld/会展示带/v1入口的可浏览API页面,点击/v1入口即可看到你注册的some、foo相关接口列表。
方案2:根路径直接展示所有接口列表
如果不需要多版本分层展示,想在根路径直接返回所有接口地址,可以用reverse自动生成接口链接,避免硬编码:
from rest_framework.decorators import api_view from rest_framework.response import Response from rest_framework.reverse import reverse @api_view(['GET']) def api_root(request, format=None): return Response({ # 路由name为DRF DefaultRouter自动生成,规则为视图集名小写加-list/-detail,自定义basename的话替换为对应值即可 'some_thing': reverse('thing-list', request=request, format=format), 'foo_bar': reverse('bar-list', request=request, format=format), # 其他接口按相同规则添加即可 })
urlpatterns配置和方案1一致即可。
补充说明
- 两种方案生成的页面都完全兼容DRF原生的可浏览API样式,无需额外开发前端代码
- 如果仅需要JSON格式的接口列表,请求时携带
Accept: application/json头即可自动返回JSON数据
内容的提问来源于stack exchange,提问作者Mr. B.
相关产品推荐
相关产品推荐

