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

如何基于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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 07:06:05