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

Django报错:'NoneType' object has no attribute 'save',无效登录需重定向

解决无效登录时出现的'NoneType' object has no attribute 'save'错误

错误原因

问题出在views.py的逻辑顺序和冗余代码上:

  • 当使用无效账号登录时,authenticate()会返回None,此时直接调用user.save()会触发属性错误,因为None没有save方法
  • 代码在判断user是否存在之前就执行了user.save(),逻辑顺序完全颠倒
  • 登录流程中根本不需要调用user.save(),用户对象是从数据库读取的,没有做任何修改操作,保存属于冗余步骤

修正后的代码

views.py

def user_login(request):
    if request.method == 'POST':
        form = LoginForm(request.POST)
        if form.is_valid():
            user = authenticate(request, **form.cleaned_data)
            if user:
                login(request, user)
                return redirect('home')
            else:
                return redirect(reverse('login'))
    else:
        form = LoginForm()
    return render(request, 'accountApp/login.html', {'form': form})

关键改动说明

  1. 移除冗余的user.save():登录操作不需要保存用户对象,Django的login()函数已经处理了会话相关的必要逻辑
  2. 调整判断顺序:先确认user不为None,再执行后续操作,彻底避免None对象调用方法的错误
  3. 可选优化(提升用户体验):如果需要给用户显示登录失败提示,可以修改重定向逻辑,让用户停留在登录页并看到错误信息:
else:
    form.add_error(None, '用户名或密码错误')
    return render(request, 'accountApp/login.html', {'form': form})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 22:25:25