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
相关产品推荐
相关产品推荐

