【问题标题】:Django / Django rest framework view uncaught exceptionDjango / Django rest framework 查看未捕获的异常
【发布时间】:2019-08-25 04:30:06
【问题描述】:

当我的设置中有 DEBUG=True 时,我会看到以下错误

Traceback:

File "/usr/local/lib/python3.6/site-packages/django/core/handlers/exception.py" in inner
34.             response = get_response(request)

File "/usr/local/lib/python3.6/site-packages/django/core/handlers/base.py" in _get_response
115.                 response = self.process_exception_by_middleware(e, request)

File "/usr/local/lib/python3.6/site-packages/django/core/handlers/base.py" in _get_response
113.                 response = wrapped_callback(request, *callback_args, **callback_kwargs)

File "/usr/local/lib/python3.6/site-packages/django/views/decorators/csrf.py" in wrapped_view
54.         return view_func(*args, **kwargs)

File "/usr/local/lib/python3.6/site-packages/rest_framework/viewsets.py" in view
116.             return self.dispatch(request, *args, **kwargs)

File "/usr/local/lib/python3.6/site-packages/rest_framework/views.py" in dispatch
495.             response = self.handle_exception(exc)

File "/usr/local/lib/python3.6/site-packages/rest_framework/views.py" in handle_exception
455.             self.raise_uncaught_exception(exc)

File "/usr/local/lib/python3.6/site-packages/rest_framework/views.py" in dispatch
492.             response = handler(request, *args, **kwargs)

File "/usr/local/lib/python3.6/site-packages/rest_framework/mixins.py" in create
21.         self.perform_create(serializer)

File "/device_mgmt/selection/views.py" in perform_create
84.             serializer.save(realm=utils.get_realm_from_request(self.request))

File "/usr/local/lib/python3.6/site-packages/rest_framework/serializers.py" in save
214.             self.instance = self.create(validated_data)

File "/usr/local/lib/python3.6/site-packages/rest_framework/serializers.py" in create
943.             instance = ModelClass._default_manager.create(**validated_data)

File "/usr/local/lib/python3.6/site-packages/django/db/models/manager.py" in manager_method
82.                 return getattr(self.get_queryset(), name)(*args, **kwargs)

File "/usr/local/lib/python3.6/site-packages/django/db/models/query.py" in create
422.         obj.save(force_insert=True, using=self.db)

File "/device_mgmt/selection/models.py" in save
123.         self.full_clean()

File "/usr/local/lib/python3.6/site-packages/django/db/models/base.py" in full_clean
1203.             raise ValidationError(errors)

Exception Type: ValidationError at /company/api/company/
Exception Value: {'id': ['Company with this Id already exists.']}

模型抛出错误,但其余框架视图正在调用 455. self.raise_uncaught_exception(exc)

我怎样才能让rest框架使用django模型中的异常?我认为这会自动处理,因为异常包含有关问题的信息。

当它被退回时,我只有一个带有<h1>Server error<h1> 的 500。

我不会假设我必须捕获异常并对其进行一些特殊处理,因为它是一个基本的 django ValidationError。

这个问题是不是因为rest框架也有ValidationError类型?

【问题讨论】:

    标签: django django-rest-framework


    【解决方案1】:

    来自 drf 文档:

    处理的异常有:

    在 REST 框架内引发的 APIException 的子类。

    Django 的 Http404 异常。

    Django 的 PermissionDenied 异常。

    所以没有。 drf 不会处理您所指的异常。

    这里说你可以实现自己的异常处理: https://www.django-rest-framework.org/api-guide/exceptions/#custom-exception-handling

    【讨论】:

    • 好的,谢谢。奇怪的是它不处理那些其他 django 异常。它们似乎很常见。它不是“我的例外”,而是模型上的 django 例外。我没有创建它。
    猜你喜欢
    • 2020-10-28
    • 2012-06-09
    • 2018-07-23
    • 2014-02-13
    • 1970-01-01
    • 2020-06-11
    • 2013-05-21
    • 2019-03-05
    • 1970-01-01
    相关资源
    最近更新 更多