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

如何在DRF API视图函数中使用Knox生成的Token

问题根源

你当前使用的DRF原生TokenAuthentication与你采用的knox身份认证组件不兼容,前者会尝试查询rest_framework.authtoken自带的Token数据表,而你生成的Token存储在knox独立的表中,因此在鉴权阶段抛出Token 类不存在 DoesNotExist 属性的错误。

修复方案

  • 替换认证类导入路径:将视图中原来的from rest_framework.authentication import TokenAuthentication修改为from knox.auth import TokenAuthentication,使用knox自带的认证类完成鉴权。
  • 确认项目配置:检查settings.py中INSTALLED_APPS已添加knox,如果配置了全局默认认证类,需要在REST_FRAMEWORK配置项的DEFAULT_AUTHENTICATION_CLASSES中加入knox.auth.TokenAuthentication。
  • 你当前Postman的Token传递格式(请求头Authorization: Token <token值>)符合knox的默认要求,无需调整。
  • 你后续补充导入的from rest_framework.decorators import authentication_classes, permission_classes已经解决了最初的NameError问题,该部分代码无需修改。

调整后的完整视图代码参考:

from rest_framework.permissions import IsAuthenticated
from rest_framework.decorators import api_view, authentication_classes, permission_classes
# 从knox导入认证类,而非DRF原生
from knox.auth import TokenAuthentication

@api_view(['GET'])
@authentication_classes([TokenAuthentication])
@permission_classes([IsAuthenticated])
def device_list(request):
    devices = Device.objects.all()
    deviceserializer = DeviceSerializers(devices, many = True)
    return Response(deviceserializer.data)

内容的提问来源于stack exchange,提问作者L.Calvin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 20:27:02