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
两者有什么区别下面这句话
from django.shortcuts import get_object_or_404
和
from rest_framework.generics import get_object_or_404
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