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

Django User模型登录页面提示用户不存在问题求助

问题分析与解决方法

核心问题

注册函数里的username和first_name变量定义末尾多了逗号,导致这两个变量变成了元组类型,而非字符串。数据库中存储的用户名是元组(比如('testuser',)),但登录时传入的是字符串testuser,authenticate自然匹配不到用户,就会提示“用户不存在”。

修复步骤

  1. 移除注册函数中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')
  1. 额外优化建议:
  • 删掉空的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 20:13:23