我尝试使用DRF构建一个API,结构如下(示例):
api/
├── v1/
│ ├── foo/
│ │ ├── bar/
│ │ │ └── urls.py # There's one `rest_framework.routers.DefaultRouter` here
│ │ ├── bar2/
│ │ │ └── urls.py # There's one `rest_framework.routers.DefaultRouter` here
│ │ ├── __init__.py
│ │ └── urls.py
│ ├── foo2/
│ │ ├── bar3/
│ │ │ └── urls.py # There's one `rest_framework.routers.DefaultRouter` here
│ │ ├── bar4/
│ │ │ └── urls.py # There's one `rest_framework.routers.DefaultRouter` here
│ │ ├── __init__.py
│ │ └── urls.py
│ ├── __init__.py
│ └── urls.py
├── __init__.py
└── urls.py
直观地说,我的端点应该是
https://api.example.com/v1/foo/bar/...
https://api.example.com/v1/foo/bar2/...
https://api.example.com/v1/foo2/bar3/...
https://api.example.com/v1/foo2/bar4/...
但是我希望Api Root
网页可以从https://api.example.com/v1
级别访问。
{"foo":"https://api.example.com/v1/foo/","foo2":"https://api.example.com/v1/foo2/"}
和/或其他信息。
话虽如此,我想这样做的方法是以某种方式“合并”这些DefaultRouter
。
我知道我可以只写router.registry.extend(some_other_router.registry)
,但这会使所有的都在同一层,我明确地需要它是多层的,如上所示。
1条答案
按热度按时间owfi6suc1#
最后我编写了一个
IndexRouter
类,它可以如下所示使用:urlpatterns
:您也可以混合它们。此外,还有其他有用的参数,例如:
name
:设置面包屑导航的页面名称deprecated_func
:一个函数,用于告知此端点是否已过时(与drf-yasg
兼容)swagger_operation_description
:drf-yasg
兼容,请参阅其文档swagger_operation_summary
:drf-yasg
兼容,请参阅其文档实现本身,虽然不是很优雅,但如下所示: