是否可以将 TokenObtainPairView (django-rest-frakmework-simplejwt) 端点放在 DRF 上的 Api 根中?

Sid*_*don 6 jwt django-rest-framework django-rest-framework-jwt

考虑下面的代码(在 urls.py 中):

router = DefaultRouter()
router.register('my-endpoint', MyViewSet, basename='mybasename')
urlpatterns = [
    path('api/v1/', include(router.urls)),
    path('api/token/', TokenObtainPairView.as_view(), name='token_obtain_pair'),
    path('api/token/refresh/', TokenRefreshView.as_view(), name='token_refresh'), 
]
Run Code Online (Sandbox Code Playgroud)

此代码有效,但 2 个端点(TokenObtainPairView 和 TokenRefreshView)未出现在 Root API (DRF) 中

然后,我尝试在路由器上注册 django-rest-frakmework-simplejwt 的两个端点:

router = DefaultRouter()
router.register('my-endpoint', MyViewSet, basename='mybasename'),
router.register('api/token/', TokenObtainPairView.as_view(), basename='token_obtain_pair')
router.register('api/token/refresh/', TokenRefreshView.as_view(), basename='token_refresh')

# Other way:
# router.register('api/token/', TokenObtainPairView, basename='token_obtain_pair')
# router.register('api/token/refresh/', TokenRefreshView, basename='token_refresh')

urlpatterns = [
    path('api/v1/', include(router.urls))
]
Run Code Online (Sandbox Code Playgroud)

然后当我运行时,出现以下错误:

File "/home/sidon/dev/boticario-teste/boticashback/boticashback/urls.py", line 32, in <module>
    path('api/', include(router.urls)),
File "/home/sidon/miniconda3/envs/botcash/lib/python3.8/site-packages/rest_framework/routers.py", line 78, in urls
    self._urls = self.get_urls()
File "/home/sidon/miniconda3/envs/botcash/lib/python3.8/site-packages/rest_framework/routers.py", line 339, in get_urls
    urls = super().get_urls()
File "/home/sidon/miniconda3/envs/botcash/lib/python3.8/site-packages/rest_framework/routers.py", line 237, in get_urls
    routes = self.get_routes(viewset)
File "/home/sidon/miniconda3/envs/botcash/lib/python3.8/site-packages/rest_framework/routers.py", line 153, in get_routes
    extra_actions = viewset.get_extra_actions()
AttributeError: type object 'TokenObtainPairView' has no attribute 'get_extra_actions'
Run Code Online (Sandbox Code Playgroud)

小智 0

不要将路由器用于令牌路径。将它们用作单独的 url 路径,它会起作用。使用您在路由器路径中设置的视图,并将令牌路径放入 urlpatterns 中。