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

Django登录校验:如何判断用户存在但密码错误并返回提示

解决Django登录区分「用户不存在」和「密码错误」的问题

要精准区分这两种错误场景,核心是先单独验证用户是否存在,再对已存在的用户校验密码。修改后的代码如下:

from django.contrib.auth.models import User  # 确保导入User模型
from django.contrib import auth, messages
from django.shortcuts import redirect, render

def signin(request):
    if request.user.is_authenticated:
        return redirect(index)
    if request.method == "POST":
        form = Signin(request.POST)
        if form.is_valid():
            username = request.POST["username"]
            password = request.POST["password"]

            # 先检查用户是否存在
            user_exists = User.objects.filter(username=username).exists()
            if not user_exists:
                messages.error(request, "用户不存在")
                return redirect(signin)
            
            # 用户存在时,验证密码正确性
            user = User.objects.get(username=username)
            if user.check_password(password):
                auth.login(request, user)
                return redirect(index)
            else:
                messages.error(request, "密码不正确")
                return redirect(signin)
    else:
        form = Signin()
        return render(
            request,
            "accounts/login.html",
            {
                "form": form,
            },
        )

关键逻辑说明

  • User.objects.filter(username=username).exists():通过用户名查询数据库,单独判断用户是否存在,这一步直接区分「用户不存在」的场景。
  • user.check_password(password):Django用户模型内置的安全校验方法,会自动对比输入密码与数据库中存储的哈希密码,避免明文对比带来的安全风险,同时精准判断密码是否错误。
  • 拆分验证步骤后,就能分别返回对应的错误提示,不会再出现混淆。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 05:45:32