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

利用Django last_login字段强制用户首次登录修改密码的问题

解决Django登录视图中新用户跳转改密页面的问题

你的代码核心问题有两个:

  • Python中判断空值应该用None而非SQL语法的NULL,这会导致你的判断条件永远不成立
  • 需确保在调用login()之前完成last_login的判断(因为login()会自动更新last_login为当前时间)

修正后的完整视图代码:

def user_login(request):
    if request.method == "POST":
        username = request.POST['login-username']
        password = request.POST['login-password']
        user = authenticate(request, username=username, password=password)

        if user is not None:
            # 先判断是否为新用户(last_login为空)
            is_new_user = user.last_login is None
            # 执行登录操作,建立用户会话
            login(request, user)
            # 根据判断结果跳转对应页面
            if is_new_user:
                return redirect('change-password')
            else:
                return redirect('dashboard')
        else:
            # 可添加登录失败提示(可选)
            return render(request, 'authenticate/login.html', {'error': '用户名或密码错误'})
    else:
        return render(request, 'authenticate/login.html', {})

关键说明:

  • 用user.last_login is None替代NULL,符合Python空值判断规范
  • 先保存新用户判断结果,再执行login(),避免login()更新last_login后导致判断失效
  • 新增登录失败提示,优化用户体验(可根据需求调整)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 12:45:47