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

Django如何通过单个API获取rest_framework_jwt的access token与refresh token

实现方案(基于Django REST framework JWT生态)

第一步:编写整合双逻辑的自定义视图

你可以直接复用现有两个接口的底层逻辑,不用重复写JWT生成/校验代码:

from rest_framework import status
from rest_framework.response import Response
from rest_framework.views import APIView
from rest_framework_jwt.settings import api_settings
# 替换成你自己实际导入的ObtainJWTView和refresh_jwt_token
from your_app.views import ObtainJWTView
from rest_framework_jwt.views import refresh_jwt_token

class UnifiedJWTView(APIView):
    def post(self, request, *args, **kwargs):
        # 校验请求参数类型,走对应逻辑
        request_data = request.data
        # 场景1:传用户名密码,走首次颁发双token逻辑
        if {"username", "password"}.issubset(request_data.keys()):
            auth_view = ObtainJWTView.as_view()
            return auth_view(request._request, *args, **kwargs)
        # 场景2:传refresh token,走刷新逻辑
        elif "refresh" in request_data:
            return refresh_jwt_token(request._request, *args, **kwargs)
        # 参数不合法返回错误
        return Response(
            {"error": "缺少必填参数:需传入用户名+密码 或 refresh_token"},
            status=status.HTTP_400_BAD_REQUEST
        )

第二步:新增路由配置

在你的urls.py里添加新接口路由即可,原有的两个接口可以保留也可以下线:

url(r'^unified-token-auth', UnifiedJWTView.as_view(), name='unified-token-auth'),

接口使用规则

  • 首次登录获取双token:请求体传入username和password,接口默认同时返回access_token和refresh_token
  • 刷新token:请求体传入refresh参数(即之前获取的refresh token),接口会返回新的access token和新的refresh token

注意事项

  • 提前在settings.py中开启JWT刷新配置:JWT_ALLOW_REFRESH = True
  • 如果你项目里的JWT返回字段是自定义过的,不需要改上面的视图逻辑,保持和原有两个接口的返回结构一致即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 07:06:01