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

如何将Django Rest Framework JWT接口注册到DRF DefaultRouter中

解决方案

DRF 的 DefaultRouter 的 register 方法仅支持注册继承自 ViewSet 类的视图,而 simplejwt 提供的 TokenObtainPairView、TokenRefreshView 都属于普通 APIView 子类,直接调用 register 注册会报错。

你可以通过将JWT视图封装为ViewSet的方式实现注册到router的需求,具体实现代码如下:

步骤1:封装JWT视图为ViewSet

from rest_framework import viewsets
from rest_framework_simplejwt.views import (
    TokenObtainPairView,
    TokenRefreshView,
)

class TokenObtainPairViewSet(viewsets.ViewSet):
    def create(self, request):
        # 转发POST请求到原生的TokenObtainPairView
        return TokenObtainPairView.as_view()(request._request)

class TokenRefreshViewSet(viewsets.ViewSet):
    def create(self, request):
        # 转发POST请求到原生的TokenRefreshView
        return TokenRefreshView.as_view()(request._request)

步骤2:注册到Router

router = DefaultRouter()
# 注意两个路由前缀不要重复,避免覆盖
router.register(r'token', TokenObtainPairViewSet, basename='my_jwt_token')
router.register(r'token/refresh', TokenRefreshViewSet, basename='token_refresh')

urlpatterns += router.urls

效果说明

配置完成后会生成两个符合REST规范的接口:

  • POST /token/:获取access、refresh令牌
  • POST /token/refresh/:刷新access令牌

两个接口都会自动显示在DRF自带的可浏览API页面中,满足前端查看接口地址的需求。

注意事项

  • 注册自定义ViewSet时必须指定basename参数,因为这两个ViewSet没有配置queryset属性,DRF无法自动生成路由前缀标识
  • 如果你只是需要让这两个接口出现在DRF可浏览API的根页面,不需要强制注册到Router,你原本直接写在urlpatterns里的配置本身就会被DRF识别展示

内容的提问来源于stack exchange,提问作者dudulu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 22:48:04