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

