【问题标题】:Django Rest Framework: Exception handler not workingDjango Rest Framework:异常处理程序不起作用
【发布时间】:2020-06-10 20:25:59
【问题描述】:

Django Rest Framework 异常处理程序似乎对我不起作用。 ValidationErrors 正在变成 500 个响应。

ValidationError 被提升时,它不会被转换为 400。

Traceback (most recent call last):
  File "/example/.local/lib/python3.6/site-packages/django/core/handlers/exception.py", line 34, in inner
    response = get_response(request)
  File "/example/.local/lib/python3.6/site-packages/django/core/handlers/base.py", line 115, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "/example/.local/lib/python3.6/site-packages/django/core/handlers/base.py", line 113, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/example/.local/lib/python3.6/site-packages/django/views/generic/base.py", line 71, in view
    return self.dispatch(request, *args, **kwargs)
  File "/example/.local/lib/python3.6/site-packages/django/views/generic/base.py", line 97, in dispatch
    return handler(request, *args, **kwargs)
  File "/example/app/views.py", line 25, in post
    serializer.is_valid(raise_exception=True)
  File "/example/.local/lib/python3.6/site-packages/rest_framework/serializers.py", line 242, in is_valid
    raise ValidationError(self.errors)
rest_framework.exceptions.ValidationError: {'email': [ErrorDetail(string='Enter a valid email address.', code='invalid')]}
[26/Feb/2020 20:44:54] "POST /login/ HTTP/1.1" 500 84465

settings.py我有

INSTALLED_APPS = [
    # ...
    'rest_framework',
]

但无论我的INSTALLED_APPS 中是否有rest_framework,我都会得到相同的行为。

将此添加到settings.py 也无效:

REST_FRAMEWORK = {
    'EXCEPTION_HANDLER': 'bla',
}

我是否遗漏了一些明显的东西?

【问题讨论】:

    标签: django-rest-framework


    【解决方案1】:

    事实证明,这取决于您在抛出异常时子类化的视图。

    我在子类化View,但不起作用:

    from rest_framework import views
    from rest_framework.exceptions import ValidationError
    
    
    class LoginView(views.View):
        def post(self, request):
            raise ValidationError()
    

    改用GenericAPIView 解决了我的问题:

    from rest_framework import generics
    from rest_framework.exceptions import ValidationError
    
    
    class LoginView(generics.GenericAPIView):
        def post(self, request):
            raise ValidationError()
    

    【讨论】:

      猜你喜欢
      • 2020-03-06
      • 2015-12-19
      • 2020-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-25
      • 2016-09-08
      • 2023-03-26
      相关资源
      最近更新 更多