如何基于JWT中的userName过滤Django序列化器返回的数据
问题修复与优化方案
现有代码冗余点修正
你已经配置了IsAuthenticated权限类,只要项目中正确配置了JWT认证逻辑,DRF会自动完成token解析、用户身份校验、request.user赋值的全流程,不需要手动解析token,这部分冗余代码可以直接删除。
序列化器使用方法
你定义的TestSerializer可以直接将Person模型实例转换为可被JSON序列化的字典结构,只需要将查询到的模型实例传入序列化器即可,具体实现如下:
修改后的views.py代码:
from rest_framework.response import Response from .serializers import TestSerializer class TestView(APIView): permission_classes = (IsAuthenticated,) def get(self, request): # 按用户名过滤数据,若Person的userName字段存的是用户名字符串,改为userName=request.user.username即可 person = Person.objects.filter(userName=request.user).first() # 处理无匹配数据的场景,避免索引报错 if not person: return Response({"error": "未查询到对应用户数据"}, status=404) # 序列化模型实例 serializer = TestSerializer(instance=person) return Response(serializer.data)
注意事项
- 如果你需要返回多条Person数据,将查询集传给序列化器时需要添加
many=True参数:TestSerializer(person_queryset, many=True) - 用
first()方法替代[0]取查询集第一个元素,可以避免查询集为空时抛出索引异常,方便做异常分支处理
内容的提问来源于stack exchange,提问作者lr_optim
相关产品推荐
相关产品推荐

