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

Django中views.py密码验证失效:密码不匹配仍创建用户

问题分析

你的代码逻辑存在致命错误:无论密码是否匹配,user.save()、login(request, user)和return redirect('home')都会执行。也就是说,即便密码不匹配,你只是添加了错误消息,但依然会创建用户并跳转。

修复方案

把用户创建、保存、登录的逻辑放到密码匹配的if分支内部,密码不匹配时直接返回表单页面,让用户重新输入:

def registerPage(request):
    if request.method == "POST":
        first_name = request.POST.get('txtFName')
        last_name = request.POST.get('txtLName')  # 这里你之前写错了,重复使用了txtFName
        username = request.POST.get('txtUserName').lower()
        email = request.POST.get('txtEmail').lower()
        password1 = request.POST.get('txtPassword')
        password2 = request.POST.get('txtConfPassword')

        if password1 == password2:
            # 密码匹配时才创建并保存用户
            user = User(
                first_name=first_name,
                last_name=last_name,
                username=username,
                email=email,
                is_superuser=False
            )
            user.set_password(password2)
            user.save()
            login(request, user)
            return redirect('home')
        else:
            messages.error(request, "Password and Confirm password do not match. Try again")
            # 密码不匹配时返回注册页面,显示错误提示
            return render(request,'login_register.html')

    return render(request,'login_register.html')
额外优化点
  • 原代码把user = User()放在if request.method == "POST"外面,会导致GET请求时也创建空User实例,完全没必要,应移到密码匹配的分支内。
  • 原代码中last_name赋值错误,重复使用了txtFName,需改成对应表单的lastName输入框name值(示例中用txtLName)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 16:07:02