如何在 Django rest 框架中捕获 Model.DoesNotExist 异常?
Posted
技术标签:
【中文标题】如何在 Django rest 框架中捕获 Model.DoesNotExist 异常?【英文标题】:How to capture the Model.DoesNotExist exception in Django rest framework? 【发布时间】:2019-03-05 15:26:15 【问题描述】:在 Django REST Framework 中,当您查询数据库模型并且它不存在时,将引发异常ModelName.DoesNotExist
。
此异常会根据型号名称而变化。
例如:
查询Car
模型将引发Car.DoesNotExist
查询Plane
模型将引发Plane.DoesNotExist
这会带来麻烦,因为您无法在一个共同的地方捕获异常,因为您不知道异常的父类。
每次查询不同的模型时都必须捕获不同的异常,例如:
try:
return Car.objects.get(pk=1)
except Car.DoesNotExist:
raise Http404
为什么要这样设计这个功能?
是否可以捕获一个常见的异常?
【问题讨论】:
【参考方案1】:你可以使用ObjectDoesNotExist
:
from django.core.exceptions import ObjectDoesNotExist
try:
return Car.objects.get(pk=1)
except ObjectDoesNotExist:
raise Http404
ObjectDoesNotExist
将捕获所有模型的 DoesNotExist
异常。
Django 还提供了get_object_or_404()
快捷方式,因此您无需显式引发 Http404。
【讨论】:
谢谢,但为什么 django 已经有 ObjectDoesNotExist 时提供了详细的异常 @KramerLi Django 提供了一个 DoesNotExist 异常作为每个模型类的属性,以识别找不到的对象类,并允许您使用 try/except 捕获特定的模型类。跨度> @KramerLi 来自文档的这一部分:docs.djangoproject.com/en/2.1/ref/models/instances/…以上是关于如何在 Django rest 框架中捕获 Model.DoesNotExist 异常?的主要内容,如果未能解决你的问题,请参考以下文章