DRF自定义ObtainAuthToken post方法 响应返回token和用户姓名
DRF自定义Token接口返回额外用户姓名实现方案
你只需要在现有CreateTokenView中重写父类的post方法,在原有返回token的逻辑基础上追加用户姓名字段即可,不需要修改现有序列化器代码。
改造后的views.py代码
from rest_framework.authtoken.views import ObtainAuthToken from rest_framework.response import Response from rest_framework.authtoken.models import Token # 保留你原有的其他导入,比如api_settings、AuthTokenSerializer等 class CreateTokenView(ObtainAuthToken): """Create a new auth token for user""" serializer_class = AuthTokenSerializer renderer_classes = api_settings.DEFAULT_RENDERER_CLASSES def post(self, request, *args, **kwargs): # 走原有序列化器校验逻辑,认证失败会自动抛400错误 serializer = self.get_serializer(data=request.data) serializer.is_valid(raise_exception=True) user = serializer.validated_data['user'] # 拿到对应用户的token,不存在就自动创建 token, _ = Token.objects.get_or_create(user=user) # 响应内容追加用户姓名,字段名和取值可根据你的项目实际情况调整 return Response({ 'token': token.key, 'user_name': user.name })
注意事项
- 如果使用Django默认内置User模型,没有自定义
name字段,可以把取值逻辑替换为f"{user.first_name} {user.last_name}".strip()适配原有姓名字段 - 如果需要额外返回用户ID、邮箱、角色等其他信息,直接在返回的字典中追加对应键值对即可,逻辑完全一致
- 你现有
AuthTokenSerializer的逻辑已经正确把认证后的user对象存入校验后的数据,不需要做任何改动
内容的提问来源于stack exchange,提问作者kubaSpolsky
相关产品推荐
相关产品推荐

