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

Django查询数据库无对应username的User实例时如何做判断处理

问题原因

你使用User.objects.get(username=user)查询用户时,如果数据库中没有对应用户名的条目,Django会直接抛出User.DoesNotExist异常,导致程序中断,这是报错的核心原因。

修复方案

以下两种常用方案二选一即可:

方案1:捕获查询异常(Django官方推荐写法)

通过try-except块包裹查询逻辑,捕获不存在的异常后返回错误提示,完整代码如下:

from django.http import HttpResponseRedirect
from django.contrib import messages
from .forms import RequestPasswordResetForm
from django.contrib.auth.models import User

def request_password(request):
    next = request.POST.get('next', '/')
    if request.method == "POST":
        form = RequestPasswordResetForm(request.POST)
        # 优先校验表单合法性,避免无效数据库查询
        if form.is_valid():
            user = request.POST['passUsername']
            try:
                users = User.objects.get(username=user)
            except User.DoesNotExist:
                messages.error(request, '该用户名不存在,请检查后重新输入')
                return HttpResponseRedirect(next)
            form.save()
            messages.success(request, 'Request has been sent! Admin will be with you shortly.')
            return HttpResponseRedirect(next)

方案2:if判断用户是否存在

用filter().first()替代get(),查询不到时会返回None,直接用if判断即可,符合你想加判断语句的需求:

# 表单校验通过后的逻辑替换为以下内容即可
if form.is_valid():
    user = request.POST['passUsername']
    users = User.objects.filter(username=user).first()
    if not users:
        messages.error(request, '该用户名不存在,请检查后重新输入')
        return HttpResponseRedirect(next)
    form.save()
    messages.success(request, 'Request has been sent! Admin will be with you shortly.')
    return HttpResponseRedirect(next)

两种方案效果完全一致,你可以根据自己的编码习惯选择即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 23:54:04