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

