django.shortcuts 和 rest_framework.generics 之间的区别

difference between django.shortcuts and rest_framework.generics

两者有什么区别下面这句话

from django.shortcuts import get_object_or_404


from rest_framework.generics import get_object_or_404
如果 kwarg 的类型通过与所需类型不匹配。因此 rest_framework.generics.get_object_or_404 只是包装 django.shortcuts.get_object_or_404 这样即使在这些情况下仍然会引发 Http404 因为 DRF 在内部使用该函数并且传递的数据很容易无法匹配所需的数据类型导致意外的 500 错误.

这个可以从DRF的source code [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