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

Django登录重定向问题:用户类型判断时出现AnonymousUser属性报错

解决登录重定向时的'AnonymousUser'无is_teacher属性问题

报错核心原因:你在执行登录操作前,错误使用request.user.is_teacher做判断——此时request.user还是系统内置的匿名用户(AnonymousUser),这个对象没有你自定义的is_teacher属性。正确做法是用authenticate验证后的user实例来判断用户类型。

修正后的代码如下:

def login_user(request):
    if request.method == 'POST':
        form = AuthenticationForm(data=request.POST)
        if form.is_valid():
            username = form.cleaned_data.get('username')
            password = form.cleaned_data.get('password')
            user = authenticate(username=username, password=password)
            if user is not None:
                # 先完成登录,再根据用户类型重定向
                login(request, user)
                if user.is_teacher:
                    return redirect('/myapp/home')
                else:
                    return redirect('/myapp/application')
            else:
                messages.error(request, "Invalid username or password")
        else:
            messages.error(request, "Invalid username or password")
    else:
        form = AuthenticationForm()
    return render(request, 'login.html', context={'form': form})

关键修改点

  • 将判断条件从request.user.is_teacher改为user.is_teacher,user是已通过身份验证的用户实例,包含你自定义的字段
  • 优化了GET请求的表单初始化逻辑,避免重复实例化表单

额外注意

如果is_teacher字段存放在与User关联的Profile模型中,需将判断条件调整为user.profile.is_teacher(根据实际模型关联方式修改)。

内容的提问来源于stack exchange,提问作者Muhammad Manga Bappah

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 08:40:35