如何在 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 异常?的主要内容,如果未能解决你的问题,请参考以下文章