Django User模型登录页面提示用户不存在问题求助
问题分析与解决方法
核心问题
注册函数里的username和first_name变量定义末尾多了逗号,导致这两个变量变成了元组类型,而非字符串。数据库中存储的用户名是元组(比如('testuser',)),但登录时传入的是字符串testuser,authenticate自然匹配不到用户,就会提示“用户不存在”。
修复步骤
- 移除注册函数中
username = request.POST['username'],和first_name = request.POST['first_name'],末尾的逗号,让变量保持字符串类型:
def register_page(request): if request.method == "POST": # 去掉末尾的逗号,避免变量变成元组 username = request.POST['username'] first_name = request.POST['first_name'] last_name = request.POST['last_name'] if User.objects.filter(username=username).exists(): messages.info(request, "Username already exist! Please try some other username.") return redirect('/user_register/') user = User.objects.create( username=username, first_name=first_name, last_name=last_name ) user.set_password(request.POST['password']) user.save() messages.success(request, "Your Account has been created succesfully!!") return redirect('/user_register/') return render(request, 'register_page.html')
- 额外优化建议:
- 删掉空的
try-except块,它会掩盖注册过程中的其他错误,不利于排查问题; - 使用
User.objects.filter(username=username).exists()替代直接判断查询集,查询更高效; - 可以改用
User.objects.create_user()方法,它会自动处理密码哈希,代码更简洁:
user = User.objects.create_user( username=username, password=request.POST['password'], first_name=first_name, last_name=last_name )
验证修复
修复后重新注册用户,数据库中存储的用户名会是正常字符串,此时登录页面输入正确的用户名和密码,就能正常通过authenticate验证并跳转到食谱页面;如果凭据错误,会返回登录页面并提示对应信息。
内容的提问来源于stack exchange,提问作者Ramji Pal
相关产品推荐
相关产品推荐

