Kra*_* Li 10 django django-models django-rest-framework
在 Django 休息框架中。当您查询数据库模型并且它不存在时,您将遇到如下异常
ModleName.DoesNotExist
Run Code Online (Sandbox Code Playgroud)
此异常将根据模型名称而变化。例如:
查询模型 Car 会提出
Car.DoesNotExist
Run Code Online (Sandbox Code Playgroud)
查询模型平面会升起
Plane.DoesNotExist
Run Code Online (Sandbox Code Playgroud)
这会导致您无法在一个常见的地方捕获异常的麻烦。因为你不知道 Exception 的父类。每次查询模型时都必须捕获异常,例如:
try:
return Car.objects.get(pk=1)
except Car.DoesNotExist:
raise Http404
Run Code Online (Sandbox Code Playgroud)
为什么 Django 设计这样的异常?是否可以通过其共同祖先捕获异常?
您可以使用ObjectDoesNotExist:
from django.core.exceptions import ObjectDoesNotExist
try:
return Car.objects.get(pk=1)
except ObjectDoesNotExist:
raise Http404
Run Code Online (Sandbox Code Playgroud)
ObjectDoesNotExist将捕获DoesNotExist所有模型的异常。
Django 还提供了get_object_or_404()快捷方式,因此您无需显式提升 Http404。