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

Django应用如何获取用户实例?访问个人页报AnonymousUser无data属性错误

Django个人资料接口错误修复方案

错误原因

你的代码存在两个核心问题导致报错:

  • 执行顺序错误:你在判断用户登录状态之前就执行了序列化操作,未登录时request.user是AnonymousUser对象,传入序列化器后直接触发异常,根本不会执行后续的登录校验逻辑
  • 序列化器入参不匹配:user_profile_serializer绑定的模型是Profile,你传入的request.user是Django自带的User模型实例,类型不匹配,就算用户处于登录状态也无法得到正确结果

修复步骤

1. 重写视图逻辑

直接使用DRF自带的权限类做登录校验,同时查询当前登录用户关联的Profile实例传入序列化器:

from rest_framework import generics, status
from rest_framework.permissions import IsAuthenticated
from rest_framework.response import Response
from .models import Profile
from .serializers import user_profile_serializer

class user_profile(generics.GenericAPIView):
    serializer_class = user_profile_serializer
    # 内置权限校验,未登录用户访问直接返回401,无需手动判断登录状态
    permission_classes = [IsAuthenticated]

    def get(self, request, *args, **kwargs):
        # 获取当前用户对应的Profile实例,不存在则自动创建,避免匹配不到记录报错
        user_profile_instance, _ = Profile.objects.get_or_create(user=request.user)
        serialized_profile = self.get_serializer(user_profile_instance).data
        return Response(serialized_profile, status=status.HTTP_200_OK)

2. 可选优化(建议调整)

你当前Profile模型的user字段配置存在不合理项:OneToOneField设置default=""不符合外键字段的约束规则,建议删除default=""参数,配合get_or_create或者用户创建时触发信号自动生成关联Profile实例即可。

内容的提问来源于stack exchange,提问作者C-Bizz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 04:18:03