在urls.py
某些应用程序的文件中,我有以下代码:
from rest_framework import routers
from .viewsets import (JournalViewSet, StatisticViewSet, FuelLogViewSet,
MoveLogViewSet, RestLogViewSet, WinLogViewSet,
GreatfulLogViewSet)
router = routers.DefaultRouter()
router.register(r'journal', JournalViewSet)
router.register(r'journal/statistic', StatisticViewSet)
router.register(r'journal/fuel', FuelLogViewSet)
router.register(r'journal/move', MoveLogViewSet)
router.register(r'journal/rest', RestLogViewSet)
router.register(r'journal/win', WinLogViewSet)
router.register(r'journal/greatful', GreatfulLogViewSet)
urlpatterns = router.urls
上面所有的 vievsets 都不是特定的,只使用 serializer_class 和 queryset。Swagger 生成正确的方案,但 DRF 说,我没有允许的 POST 方法(在我实际上有的 viesets 中),当我尝试打开类似的 url 时127.0.0.1:8000/journal/win
,drf 返回日志的方案。当寄存器没有嵌套时router.register(r'move', MoveLogViewSet)
,我得到了所有正确的。我知道,DRF 可能不像我那样提供嵌套路由。我应该怎么办?
我强烈建议您阅读DRF中的DefaultRouter。
这是因为第二条路径lookup
是DefaultRouter
.
journal/fuel/
=>{prefix}/{lookup}/[.format]
对于您的问题:
from rest_framework import routers
from .viewsets import (JournalViewSet, StatisticViewSet, FuelLogViewSet,
MoveLogViewSet, RestLogViewSet, WinLogViewSet,
GreatfulLogViewSet)
router = routers.DefaultRouter()
# assessment_router = routers.DefaultRouter()
router.register(r'index', JournalViewSet) # Index
router.register(r'statistic', StatisticViewSet)
router.register(r'fuel', FuelLogViewSet)
router.register(r'move', MoveLogViewSet)
router.register(r'rest', RestLogViewSet)
router.register(r'win', WinLogViewSet)
router.register(r'greatful', GreatfulLogViewSet)
# assessment_router.register(r'dashboard', SnippetViewSet)
urlpatterns = [
path('journal/', include(router.urls)),
# path('assessment/', include(assessment_router.urls)),
# path('admin/', admin.site.urls),
]
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句