0

两个有什么区别下面的句子

from django.shortcuts import get_object_or_404


from rest_framework.generics import get_object_or_404
4

1 回答 1

1

django.shortcuts.get_object_or_404如果传递的 kwarg 的类型与所需的类型不匹配,则可能会引发除Http404(即TypeError,ValueError和) 以外的错误。ValidationError因此 ,即使在这些情况下,由于 DRF 在内部使用该函数并且传递的数据很容易无法匹配所需的数据类型,从而导致意外的 500 错误,因此rest_framework.generics.get_object_or_404只是简单地进行包装。django.shortcuts.get_object_or_404Http404

这可以从 DRF 的源代码 [GitHub]中看到:

from django.shortcuts import get_object_or_404 as _get_object_or_404


def get_object_or_404(queryset, *filter_args, **filter_kwargs):
    """
    Same as Django's standard shortcut, but make sure to also raise 404
    if the filter_kwargs don't match the required types.
    """
    try:
        return _get_object_or_404(queryset, *filter_args, **filter_kwargs)
    except (TypeError, ValueError, ValidationError):
        raise Http404
于 2021-06-16T11:52:06.753 回答