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

如何解决TypeError: function()参数'code'必须是code而非str错误?

解决Django REST Framework自定义认证视图的TypeError错误

错误根源

obtain_auth_token是函数视图,并非类视图,直接用类继承它会触发TypeError: function() argument 'code' must be code, not str错误。此外代码还有两处小问题:

  • 未导入Response类
  • serializer.validated_data的键应为小写'user',而非大写'User'

正确实现方式

方式一:基于APIView编写类视图

这是最规范的类视图实现方式:

from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework.authtoken.serializers import AuthTokenSerializer
from rest_framework.authtoken.models import Token
from rest_framework import status

class UserAuthentication(APIView):
    def post(self, request, *args, **kwargs):
        serializer = AuthTokenSerializer(data=request.data, context={'request': request})
        serializer.is_valid(raise_exception=True)
        user = serializer.validated_data['user']
        token, created = Token.objects.get_or_create(user=user)
        return Response({'token': token.key}, status=status.HTTP_200_OK)

方式二:复用obtain_auth_token的函数视图

如果想保留原obtain_auth_token的逻辑,可通过函数包装实现自定义:

from rest_framework.authtoken.views import obtain_auth_token
from rest_framework.response import Response
from rest_framework.authtoken.models import Token

def custom_obtain_auth_token(request):
    # 调用原认证视图获取响应
    response = obtain_auth_token(request)
    token_key = response.data['token']
    # 可在此添加自定义逻辑,比如获取用户信息
    user = Token.objects.get(key=token_key).user
    return Response({'token': token_key})

关键修正点

  1. 类视图必须继承DRF的APIView或其子类,而非函数视图
  2. 确保导入Response类用于返回响应
  3. 从serializer.validated_data中获取用户时使用小写键'user'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 06:35:15