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

Django出现'AnonymousUser' object has no attribute 'profile'错误如何解决?

报错原因

  • 同端口运行多个Django应用时,默认SESSION_COOKIE_NAME配置均为sessionid,后启动的应用会覆盖本地存储的session cookie,导致原应用的有效登录会话失效,请求被识别为未登录状态,request.user会被赋值为Django内置的AnonymousUser匿名用户对象。
  • 你自定义的DashboardView继承了LoginView后重写了get方法,没有复用父类内置的登录状态校验逻辑,直接访问request.user.profile,但AnonymousUser没有profile关联属性,直接触发属性不存在报错。

修复方案

第一步:补充登录状态校验,修复当前报错

在访问profile属性前先判断用户登录状态,未登录用户直接走父类默认的登录跳转/表单展示逻辑,修复后的代码参考如下:

class DashboardView(auth_views.LoginView):
    template_name = "dashboard/home.html"
    verify_email_required = 'registration/verify_email_required.html'
    form_class = ProfiledAuthenticationForm
    def get(self, request, *args, **kwargs):
        # 先判断用户是否已登录,未登录走父类默认逻辑
        if not request.user.is_authenticated:
            return super().get(request, *args, **kwargs)
        
        context = self.get_context_data()
        context['form'] = self.form_class()
        
        if request.user.profile.is_verified:        
            return render(request, self.template_name, context)
        else:           
            return render(request, self.verify_email_required, context)

第二步:修改session cookie配置,避免同端口多应用冲突

在两个Django应用的settings.py中分别添加不同的session cookie名称配置,后续同端口运行不会再出现会话覆盖问题:

# 第一个应用的settings.py添加
SESSION_COOKIE_NAME = "sessionid_my_first_app"

# 第二个应用的settings.py添加
SESSION_COOKIE_NAME = "sessionid_my_second_app"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 08:54:07