四、抛出404错误
如果访问的资源不存在的话,我们想抛出404错误,而不是暴露Django的错误信息。Django为我们提供了这样一个方法
-
get_object_or_404()
:将一个Django模型作为第一个位置参数,后面可以跟上任意个数的关键字参数,如果对象不存在则弹出Http404错误。 -
为什么我们使用辅助函数
get_object_or_404()
而不是自己捕获ObjectDoesNotExist
异常呢?还有,为什么模型API不直接抛出ObjectDoesNotExist
而是抛出Http404
呢?
因为这样做会增加模型层和视图层的耦合性。而Django
的设计思想中,最重要的思想之一就是要保证松散耦合。一些受控的耦合将会被包含在 django.shortcuts
模块中。
例子:当id不存在时,抛出404
from django.shortcuts import get_object_or_404, render
from .models import Question
# ...
def