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

